我开发了一个基于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
的资产。
首先,我试图预热/清除Symfony缓存,但仍然卡住。
当我在开发人员环境中浏览网站(称为app_dev.php
)时,问题消失了。
我尝试重新启动Apache,但仍然卡住。
我将VirtualHost的DocumentRoot
从/var/www/current/web
更改为/var/www/foo/web
,问题消失了,直到下一个版本。
这是我的堆栈:
我希望资产URL指向manifest.json
文件中指定的新版本。
我怀疑某个地方存在缓存问题,但是找不到。
答案 0 :(得分:0)
我想我找到了答案。使用功能encore_entry_link_tags
和encore_entry_script_tags
(Official doc)将版本化的资产加载到Twig模板中。
这些函数从Encore生成的entrypoints.json
文件中读取信息,以知道要渲染的确切文件名。
在其背后的只是PHP。
当我使用php-fpm时,我在部署资产的新版本时必须重新启动服务php-fpm:
service php7.3-fpm restart
就是这样!