这是我的环境.请注意,这也是在相关的开发模式和生产模式中设置的.
Dev:
https://ar.dev.loc/
https://en.dev.loc/
Live:
https://ar.site.com/
https://en.site.com/
Run Code Online (Sandbox Code Playgroud)
我正在使用阿拉伯语和英语的多商店设置,一切运行良好,包括构建模块和模板构建.
但是,如果我对任何较少的文件或JS文件进行更改(尽管使用grunt less或grunt watch),我必须在我的开发环境中运行以下命令,一次只能在我的本地计算机上查看它们.
$ rm -rf var/cache var/page_cache var/view_preprocessed pub/static
$ mkdir pub/static
$ bin/magento setup:static-content:deploy
$ bin/magento setup:static-content:deploy ar_SA
$ grunt exec less // sometimes I leave this do this
$ grunt // I swap between these
Run Code Online (Sandbox Code Playgroud)
每次都需要很长时间才能完成此过程.这是令人沮丧的,因为我是快速编码器,喜欢立即在网站上看到CSS和Less而不是等待.
我们团队正在做的快速方法是实际进行更改pub/static,然后我们将这些更改为app/design等等,然后执行上面的过程然后git.
直播服务器几乎一样.Git pull然后维护模式(在ecom网站上疯狂!谁建立M2?然后我们运行上面的命令 - 45分钟的停机时间)
当然,必须有更快的方式让我们的部署,开发和团队更好地工作,并在不停机的情况下更快地查看更改!
即使是Magento 2的官方文档也说明你的LIVE网站需要进入维护和停机模式才能发布内容 - 这对我们来说不是一个选择.CTO不高兴.简直荒谬.
与人们询问有关更快开发相同问题的相关问题:
只有在部署静态内容后才能应用对CSS和JavaScript的更改
所以我想整理所有问题并解决这个问题.
Emi*_*ech 14
是的,通过以下步骤可以更快:
你可以通过以下命令在pub static中找到该文件
find pub/static -iname yourjsfile.js
Run Code Online (Sandbox Code Playgroud)
在的.htaccess酒吧/静态丢失的文件发送到酒吧/ static.php与参数资源 和酒吧/ static.php文件如果有文件创建一个静态资源和部署.
注意:这仅适用于apache mod_rewrite
对于Nginx,您需要通过nginx.conf.sample配置相同的内容
setup:static-content:deploy好久没碰了 在厌倦了 Magento 2 中缓慢的部署过程后,我设计了自己的方法,允许我对 CSS 或 JS 文件进行更改,并几乎立即在网站上反映出来。这是魔法:
cd /path/to/docroot/app/design/frontend/$VENDOR/$THEME
find * -type f \( -name "*.css" -o -name "*.js" \) -cmin -10 | xargs -I {} bash -c 'dest=/path/to/docroot/pub/static/frontend/$VENDOR/$THEME/*/$(echo {} | sed -E "s/(web\/|\/[^/]+$)//g"); echo Deploying {} to $dest ...; mkdir -p $dest && cp {} $_'
cd - 1> /dev/null
Run Code Online (Sandbox Code Playgroud)
让我们分解它...
cd /path/to/docroot/app/design/frontend/$VENDOR/$THEME- 切换到活动主题目录(用您自己的值替换$VENDOR和$THEME)find * -type f \( -name "*.css" -o -name "*.js" \) -cmin -10- 在主题目录中*找到过去 10 分钟内以任何方式更改的所有 CSS 和 JS 文件(去掉./结果中的前导);随意更改任何参数以满足您的需要xargs -I {} bash -c- 对于每个更改的文件,执行 #4-6 中的命令(更改文件的相对路径存储在{})dest=/path/to/docroot/pub/static/frontend/$VENDOR/$THEME/*/$(echo {} | sed -E "s/(web\/|\/[^/]+$)//g") - 设置部署目标路径
*水珠照顾匹配的任何区域,那么你是在$(...)生成一个子shell 以仅提取我们需要附加到目标路径的源路径部分(web目录级别在 下不存在pub)echo Deploying {} to $dest ... - 将活动记录到控制台,以便您知道正在部署哪些文件mkdir -p $dest && cp {} $_- 创建目标目录结构;当且仅当目录结构创建成功时,将更改后的文件复制到其部署目标下的pub($_指向上一个命令的最后一个参数mkdir,即$dest)cd - 1> /dev/null - 切换到上一个目录,以便您可以从上次中断的地方继续您可以将所有这些放入别名中以将其缩减为一个命令,但请记住对单引号进行转义:
alias update='cd /path/to/docroot/app/design/frontend/$VENDOR/$THEME; find * -type f \( -name "*.css" -o -name "*.js" \) -cmin -10 | xargs -I {} bash -c '"'"'dest=/path/to/docroot/pub/static/frontend/$VENDOR/$THEME/*/$(echo {} | sed -E "s/(web\/|\/[^/]+$)//g"); echo Deploying {} to $dest ...; mkdir -p $dest && cp {} $_'"'"'; cd - 1> /dev/null'
Run Code Online (Sandbox Code Playgroud)
如果您使用 varnish,那么您应该在别名(例如,sudo service varnish restart)的末尾添加一个命令来重新启动 varnish,否则您可能仍然会访问缓存的静态资产。
如果update每次更改都懒得打字,那么您可以将其放入 cron 或将其集成到 grunt 监视器任务或等效项中。
由于我使用-j (--jobs)选项 fork 一个新进程,我将static-content:deploy时间从超过 10 分钟减少到不到一分钟。看Magento/Deploy/Process/Queue.php
php bin/magento setup:static-content:deploy -j[JOBS_AMOUNT]
Run Code Online (Sandbox Code Playgroud)
--jobs选项使用指定数量的作业启用并行处理。默认值为 4。要使任务在一个进程中运行(例如,如果您的系统不支持进程分叉),请使用--jobs 1。// 参见:devdocs.magento.com
此选项只有在pcntl启用时才能使用。
构建此扩展不需要外部库。
PHP 中的进程控制支持默认未启用。
--enable-pcntl在编译 PHP 以启用进程控制支持时,您必须使用配置选项编译 PHP的 CGI 或 CLI 版本。
注:目前,该模块将不会对非Unix平台(Windows)函数。
注意:这
pcntl_fork将不会工作,如果PHP正在运行作为Apache模块,在这种情况下,该功能将不存在!
我不熟悉磁电机,但这可能对你有用。当我更新我的网站时,我会按照以下步骤操作:
假设该站点位于site目录下。
$ cp -r site site-update
# update the site in site-update directory
$ mv site site-old && mv site-update site
Run Code Online (Sandbox Code Playgroud)
这样我的网站就可以更新,而不会造成任何停机。