使用带有 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,直到下一个版本问题才消失。

这是我的堆栈:

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

我怀疑某处存在缓存问题,但找不到位置。

我想我找到了答案。使用函数 encore_entry_link_tagsencore_entry_script_tags (Official doc) 将版本化资产加载到 Twig 模板中。 这些函数从 Encore 生成的 entrypoints.json 文件中读取,以了解要呈现的确切文件名。 论文的背后只有 PHP。 当我使用 php-fpm 时,我必须在部署我的资产的新版本时重新启动服务 php-fpm:

service php7.3-fpm restart

就是这样!