在Magento 2中部署静态内容的更快捷途径?开发生活等?

The*_*Kid 28 magento magento2

这是我的环境.请注意,这也是在相关的开发模式和生产模式中设置的.

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更改仅在magento2中的deploy命令后反映

Magento 2静态缓存

只有在部署静态内容后才能应用对CSS和JavaScript的更改

所以我想整理所有问题并解决这个问题.

Emi*_*ech 14

是的,通过以下步骤可以更快:

  1. 更改app目录中的js/css文件
  2. 现在删除文件表单pub/static文件夹

你可以通过以下命令在pub static中找到该文件

find pub/static -iname yourjsfile.js
Run Code Online (Sandbox Code Playgroud)
  1. 仅删除pub/static文件夹中有更改的文件
  2. 确保pub/static.htaccess文件和pub/static.php文件存在
  3. pub文件夹分配文件写权限
  4. 现在点击浏览器中的URL .htaccess将直接部署丢失的js文件

在的.htaccess酒吧/静态丢失的文件发送到酒吧/ static.php与参数资源酒吧/ static.php文件如果有文件创建一个静态资源和部署.

注意:这仅适用于apache mod_rewrite

对于Nginx,您需要通过nginx.conf.sample配置相同的内容

  • 我不认为这是一个接近的答案.不幸的是,你得到了一些赏金. (4认同)

thd*_*oan 5

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)

让我们分解它...

  1. cd /path/to/docroot/app/design/frontend/$VENDOR/$THEME- 切换到活动主题目录(用您自己的值替换$VENDOR$THEME
  2. find * -type f \( -name "*.css" -o -name "*.js" \) -cmin -10- 在主题目录中*找到过去 10 分钟内以任何方式更改的所有 CSS 和 JS 文件(去掉./结果中的前导);随意更改任何参数以满足您的需要
  3. xargs -I {} bash -c- 对于每个更改的文件,执行 #4-6 中的命令(更改文件的相对路径存储在{}
  4. dest=/path/to/docroot/pub/static/frontend/$VENDOR/$THEME/*/$(echo {} | sed -E "s/(web\/|\/[^/]+$)//g") - 设置部署目标路径
    • *水珠照顾匹配的任何区域,那么你是在
    • $(...)生成一个子shell 以仅提取我们需要附加到目标路径的源路径部分(web目录级别在 下不存在pub
  5. echo Deploying {} to $dest ... - 将活动记录到控制台,以便您知道正在部署哪些文件
  6. mkdir -p $dest && cp {} $_- 创建目标目录结构;当且仅当目录结构创建成功时,将更改后的文件复制到其部署目标下的pub($_指向上一个命令的最后一个参数mkdir,即$dest)
  7. 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 监视器任务或等效项中。


Nol*_*nig 5

由于我使用-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启用时才能使用。


pcntl

构建此扩展不需要外部库

PHP 中的进程控制支持默认启用。

--enable-pcntl在编译 PHP 以启用进程控制支持时,您必须使用配置选项编译 PHP的 CGI 或 CLI 版本。

注:目前,该模块将不会对非Unix平台(Windows)函数。

注意:pcntl_fork不会工作,如果PHP正在运行作为Apache模块,在这种情况下,该功能将不存在!


nap*_*zba 1

我不熟悉磁电机,但这可能对你有用。当我更新我的网站时,我会按照以下步骤操作:

假设该站点位于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)

这样我的网站就可以更新,而不会造成任何停机。

  • 正如我所说,它**可能**对你有用......以这种态度,没有人会试图回答你。 (7认同)
  • 既然您要求解决方法(正如您所说,官方文档说您的 LIVE 站点需要进入维护和停机模式才能发布内容),所以当您得到解决方法时不要感到惊讶:-) (6认同)