在Magento 2中部署静态内容的更快途径?戴夫要活多久?

在Magento 2中部署静态内容的更快途径?戴夫要活多久?,magento,magento2,Magento,Magento2,这是我的环境。请注意,这也是在相关的开发模式和生产模式中设置的 Dev: https://ar.dev.loc/ https://en.dev.loc/ Live: https://ar.site.com/ https://en.site.com/ 我正在使用阿拉伯语和英语的多商店设置,一切正常,包括构建模块和模板构建 但是,如果我更改了任何less文件或JS文件(尽管使用了grunt less或grunt watch),我必须在我的开发环境中一次性运行以下命令才能在本地机器上看到它们 $

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

Dev:
https://ar.dev.loc/
https://en.dev.loc/

Live:
https://ar.site.com/
https://en.site.com/
我正在使用阿拉伯语和英语的多商店设置,一切正常,包括构建模块和模板构建

但是,如果我更改了任何less文件或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
每次执行此过程都需要很长时间。这是令人沮丧的,因为我是一个快速的程序员,喜欢在网站上看到CSS,而不是立即看到,而不是等待

我们团队正在做的快速方法实际上是在
pub/static
中进行更改,然后我们将这些更改发送到less和
app/design
等,然后执行上述过程,然后是git

实时服务器几乎是一样的。Git拉然后维护模式(在一个实时ecom站点上的疯狂!谁构建M2?然后我们运行上面的命令-停机45分钟)

当然,我们的部署、开发和团队必须有一种更快的方式来更好地工作,并在不停机的情况下更快地看到更改

即使是Magento 2官方文档也表示,您的LIVE站点需要进入维护和停机模式才能发布内容-这不是我们的选择。首席技术官不高兴。简直荒谬。

与询问快速发展相关的问题相同的问题:


因此,我想整理所有问题并解决此问题。

我不熟悉磁电机,但这可能适合您。当我更新我的网站时,我遵循以下步骤:

假设站点位于
site
目录下

$ cp -r site site-update

# update the site in site-update directory

$ mv site site-old && mv site-update site

通过这种方式,我的网站可以在不停机的情况下进行更新。

是的,通过以下步骤可以加快更新速度:

  • 在应用程序目录中更改js/css文件
  • 现在删除文件表单pub/static文件夹
  • 您可以通过以下命令在pub static中找到该文件

    find pub/static -iname yourjsfile.js
    
  • 仅从pub/static文件夹中删除有更改的文件
  • 确保有pub/static.htaccess文件&pub/static.php文件
  • 将文件写入权限分配给pub文件夹
  • 现在点击浏览器中的URL。htaccess将直接部署缺少的js文件
  • pub/static中的.htaccess使用参数resource将缺少的文件发送到pub/static.php 并且pub/static.php文件为该文件创建一个StaticResource(如果可用)并部署它

    注意:这只适用于apachemod_rewrite

    对于Nginx,您需要通过Nginx.conf.sample

    一般性意见对其进行配置:

    您不能像在setup:static content:deploy中那样在这里进行“咕噜”操作。您可以并行地为en_-US(即不带参数)和ar_-SA生成静态内容(bash允许您非常轻松地这样做)

    如果缺少HTTPS(安全)资源(可能是您另外使用grunt的原因?),请确保为编译静态内容的进程设置了环境变量“HTTPS”(例如
    HTTPS=ON


    除此之外,是的,这需要时间。需要注意的是,无PHP编译需要相当长的时间。当我从另一个开发人员那里听说这一点时,我想到的一个想法是,在本地更少的缓存中缓存更少的编译,并且只有在文件实际发生更改时才重新编译。也许你也可以试试

    我还没有对一起破解PoC负责,但我认为这应该是一个很好的测试,以证明编译量少是瓶颈


    我还强烈建议运行一个在git push上自动编译的构建服务器,以降低负担。

    在我们公司,我们通过使用来管理Magento2部署,还有一个运行非常好的

    使用capistrano,您可以将Web服务器根目录配置为指向指向“release”文件夹的符号链接。当您开始部署时,所有编译(di、静态内容、ecc)都在一个单独的文件夹中进行,因此您的在线网站不会受到影响,并保持在线。程序结束时,只有在没有错误的情况下,符号链接才会切换到新版本

    这样,停机时间通常为零或减少到几秒钟


    Capistrano还提供了一个基本的“回滚”功能,允许在出现问题时快速恢复到旧版本。

    我为这个问题提供了一个解决方案

    您必须发布所需存储的内容

    php bin/magento setup:static-content:deploy [lang(en_US)] -t [vendor]/[theme]
    
    我不会更改,因为magento缓存,所以请手动删除它

    rm -rf pub/static/_*/*
    
    php bin/magento cache:flush; php bin/magento cache:clean;
    
    “立即刷新页面并完成”命令在重新生成de页面时会进行新的更改


    这些步骤对于phtml和静态内容的更改是强制性的,布局更改需要缓存刷新,而控制器上的更改是arsh中的一个难题,因为您需要使用di:编译这一步确实会让您离开生产。

    我有一段时间没有接触过
    设置:静态内容:部署。在厌倦了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
    
    让我们把它分解一下

  • cd/path/to/docroot/app/design/frontend/$VENDOR/$THEME
    -更改为活动主题目录(用您自己的值替换
    $VENDOR
    $THEME
  • find*-typef\(-name“*.css”-o-name“*.js”\)-cmin-10
    -查找主题目录中过去10分钟内以任何方式更改的所有css和js文件(
    *
    去掉结果中的前导
    /
    );请随意更改任何
    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'
    
    php bin/magento setup:static-content:deploy -j[JOBS_AMOUNT]