运行安可无阻塞
Run encore without blocking
我有一个包含很多脚本和样式的 Symfony 项目。 Encore 在生产中执行大约需要 4 分钟:
npm run encore prod
它使用 json-manifest-path 进行版本控制。虽然它正在执行,但我收到了 500 响应。错误是:
An exception has been thrown during the rendering of a template ("Asset manifest file "XXX/web/build/manifest.json" does not exist.").
这是因为清理:
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()
;
我该如何避免这个问题?
你不应该在你的生产机器上 运行 encore prod
(同样你不应该在那台机器上 运行 composer install
)。
构建和部署是不同的步骤。
您需要 运行 在不同的地方执行所有构建步骤(至少与您实际使用的目录不同 serve应用程序),然后部署生成的“工件”(例如构建过程的结果)。
如何执行此操作取决于您的服务基础架构和部署过程,但它可以类似于:
- 正在复制文件(
mv
、cp
等)。
- 将文件从构建机器传输到应用程序服务器(
rsync
、scp
、ftp
等)
- 构建 Docker 应用程序映像并推送到容器注册表。
- 等等
无论您做什么,都需要避免 运行修改正在主动提供的文件的漫长过程。
构建过程可以很长,它们很长也没关系(尽管我们更希望它们是分类器),但部署过程应尽可能短。
我有一个包含很多脚本和样式的 Symfony 项目。 Encore 在生产中执行大约需要 4 分钟:
npm run encore prod
它使用 json-manifest-path 进行版本控制。虽然它正在执行,但我收到了 500 响应。错误是:
An exception has been thrown during the rendering of a template ("Asset manifest file "XXX/web/build/manifest.json" does not exist.").
这是因为清理:
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()
;
我该如何避免这个问题?
你不应该在你的生产机器上 运行 encore prod
(同样你不应该在那台机器上 运行 composer install
)。
构建和部署是不同的步骤。
您需要 运行 在不同的地方执行所有构建步骤(至少与您实际使用的目录不同 serve应用程序),然后部署生成的“工件”(例如构建过程的结果)。
如何执行此操作取决于您的服务基础架构和部署过程,但它可以类似于:
- 正在复制文件(
mv
、cp
等)。 - 将文件从构建机器传输到应用程序服务器(
rsync
、scp
、ftp
等) - 构建 Docker 应用程序映像并推送到容器注册表。
- 等等
无论您做什么,都需要避免 运行修改正在主动提供的文件的漫长过程。
构建过程可以很长,它们很长也没关系(尽管我们更希望它们是分类器),但部署过程应尽可能短。