使用Webpack Encore和Symfony3.4在产品中找不到资产

时间:2019-07-02 10:25:19

标签: php symfony-3.4 webpack-encore

我开发了一个基于Symfony 3.4的网站,并使用Webpack Encore来管理资产。当我部署上一个版本时,找不到CSS / JS资产:

enter image description here

检查网页的源代码时,我发现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,问题消失了,直到下一个版本。

这是我的堆栈:

  • Apache 2.4
  • php7.3.6-fpm
  • 启用了OPCache
  • 已启用HTTP2

我希望资产URL指向manifest.json文件中指定的新版本。

我怀疑某个地方存在缓存问题,但是找不到。

1 个答案:

答案 0 :(得分:0)

我想我找到了答案。使用功能encore_entry_link_tagsencore_entry_script_tagsOfficial doc)将版本化的资产加载到Twig模板中。 这些函数从Encore生成的entrypoints.json文件中读取信息,以知道要渲染的确切文件名。 在其背后的只是PHP。 当我使用php-fpm时,我在部署资产的新版本时必须重新启动服务php-fpm:

service php7.3-fpm restart

就是这样!