Warm tip: This article is reproduced from serverfault.com, please click

php-再次运行而无阻塞

(php - 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()
;

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

Questioner
Manolo
Viewed
22
yivi 2020-12-01 15:45:37

你不应该encore prod在生产计算机上运行(以不应该composer install在该计算机上运行的相同方式)。

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

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

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

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

无论你做什么,都需要避免运行长时间的进程来修改正在主动提供的文件。

构建过程可能很长,可以很长(只要我们希望它们是分类器即可),但是部署过程应尽可能短。