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

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

http://img1.mukewang.com/6145ebd30001175904140109.jpg

当我检查网页的源代码时,我看到 URL 指向旧版本的资产,就像/build/app.db32012d.css文件manifest.json引用新版本的资产一样:

{
  "build/app.css": "/build/app.2aba4862.css"
  }

我使用部署程序来部署新版本。部署过程构建资产运行yarn encore prod

首先,我尝试预热/清除 Symfony 缓存,但仍然卡住了。

当我在开发环境(调用app_dev.php)中浏览站点时,问题消失了。

我试图重新启动 Apache 但仍然卡住了。

DocumentRoot将 VirtualHost 的从更改/var/www/current/web/var/www/foo/web并且问题消失,直到下一个版本。

这是我的堆栈:

  • 阿帕奇 2.4

  • php7.3.6-fpm

  • 启用 OPCache

  • 启用 HTTP2

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

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


翻翻过去那场雪
浏览 190回答 1
1回答

莫回无

我想我找到了答案。版本化资产使用函数encore_entry_link_tags和encore_entry_script_tags(官方文档)加载到 Twig 模板中。这些函数从entrypoints.jsonEncore 生成的文件中读取,以了解要渲染的确切文件名。在论文后面它只是 PHP。当我使用 php-fpm 时,我必须在部署新版本的资产时重新启动服务 php-fpm:service php7.3-fpm restart就是这样!
打开App,查看更多内容
随时随地看视频慕课网APP