使用带有 Symfony3.4 的 Webpack Encore 在产品中找不到资产
Assets not found in prod using Webpack Encore with Symfony3.4
我基于Symfony 3.4 开发了一个网站,使用Webpack Encore 管理资产。当我部署最后一个版本时,CSS/JS 资产未找到:
当我检查网页的源代码时,我看到 URL 指向资产的旧版本,如 /build/app.db32012d.css
而文件 manifest.json
引用新版本的资产资产:
{
"build/app.css": "/build/app.2aba4862.css"
}
我使用 deployer 部署新版本。部署过程构建资产 运行 yarn encore prod
.
首先,我尝试 warmup/clear Symfony 缓存但仍然卡住了。
当我在开发环境中浏览站点(调用 app_dev.php
)时,问题消失了。
我尝试重新启动 Apache 但仍然卡住了。
我将 VirtualHost 的 DocumentRoot
从 /var/www/current/web
更改为 /var/www/foo/web
,直到下一个版本问题才消失。
这是我的堆栈:
- 阿帕奇 2.4
- php7.3.6-fpm
- 已启用 OPCache
- 已启用 HTTP2
我希望资产 URL 指向 manifest.json
文件中指定的新版本。
我怀疑某处存在缓存问题,但找不到位置。
我想我找到了答案。使用函数 encore_entry_link_tags
和 encore_entry_script_tags
(Official doc) 将版本化资产加载到 Twig 模板中。
这些函数从 Encore 生成的 entrypoints.json
文件中读取,以了解要呈现的确切文件名。
论文的背后只有 PHP。
当我使用 php-fpm 时,我必须在部署我的资产的新版本时重新启动服务 php-fpm:
service php7.3-fpm restart
就是这样!
我基于Symfony 3.4 开发了一个网站,使用Webpack Encore 管理资产。当我部署最后一个版本时,CSS/JS 资产未找到:
当我检查网页的源代码时,我看到 URL 指向资产的旧版本,如 /build/app.db32012d.css
而文件 manifest.json
引用新版本的资产资产:
{
"build/app.css": "/build/app.2aba4862.css"
}
我使用 deployer 部署新版本。部署过程构建资产 运行 yarn encore prod
.
首先,我尝试 warmup/clear Symfony 缓存但仍然卡住了。
当我在开发环境中浏览站点(调用 app_dev.php
)时,问题消失了。
我尝试重新启动 Apache 但仍然卡住了。
我将 VirtualHost 的 DocumentRoot
从 /var/www/current/web
更改为 /var/www/foo/web
,直到下一个版本问题才消失。
这是我的堆栈:
- 阿帕奇 2.4
- php7.3.6-fpm
- 已启用 OPCache
- 已启用 HTTP2
我希望资产 URL 指向 manifest.json
文件中指定的新版本。
我怀疑某处存在缓存问题,但找不到位置。
我想我找到了答案。使用函数 encore_entry_link_tags
和 encore_entry_script_tags
(Official doc) 将版本化资产加载到 Twig 模板中。
这些函数从 Encore 生成的 entrypoints.json
文件中读取,以了解要呈现的确切文件名。
论文的背后只有 PHP。
当我使用 php-fpm 时,我必须在部署我的资产的新版本时重新启动服务 php-fpm:
service php7.3-fpm restart
就是这样!