【问题标题】:Run encore without blocking运行安可而不阻塞
【发布时间】:2020-11-30 08:48:59
【问题描述】:

我有一个包含很多脚本和样式的 Symfony 项目。 Encore 在生产环境中执行大约需要 4 分钟:

npm run encore prod

它使用json-manifest-path 进行版本控制。虽然它正在执行,但我得到了 500 响应。错误是:

在渲染模板期间抛出异常(“资产清单文件“XXX/web/build/manifest.json”不存在。”)。

这是因为清理:

Encore
    .setOutputPath('web/build/')
    .setPublicPath('/build')
    .createSharedEntry('app', './assets/js/app.js')
    .addStyleEntry('style', './assets/css/style.scss')
    // ... more assets here
    .enableSingleRuntimeChunk()
    .cleanupOutputBeforeBuild() // <------------------- cleanup
    .enableSourceMaps(!Encore.isProduction())
    .enableVersioning(Encore.isProduction())
    .enableSassLoader(function(options) {}, { resolveUrlLoader: false })
    .autoProvidejQuery()
;

我应该如何避免这个问题?

【问题讨论】:

    标签: php symfony deployment webpack-encore


    【解决方案1】:

    你不应该在你的生产机器上运行encore prod(就像你不应该在那个机器上运行composer install一样)。

    构建和部署是不同的步骤。

    您需要在不同的位置运行所有构建步骤(至少与您用于实际服务应用程序的目录不同),然后部署生成的“人工制品”(例如构建过程的结果)。

    您如何执行此操作取决于您的服务基础架构和部署过程,但可能类似于:

    • 复制文件(mvcp 等)。
    • 将文件从构建机器传输到应用服务器(rsyncscpftp 等)
    • 构建 Docker 应用程序映像并推送到容器注册表。

    无论您做什么,都需要避免运行一个修改正在被主动提供的文件的长进程。

    构建过程可能很长,但它们很长也没关系(我们希望它们是分类器),但部署过程应该尽可能短。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-25
      • 2019-07-23
      相关资源
      最近更新 更多