Docker中的Webpacker&Rails资产管道-视图未指向更新的JS资产

时间:2019-05-23 11:10:37

标签: ruby-on-rails docker asset-pipeline webpacker

我正在Docker容器中运行Rails应用程序,但是由于无法可靠地获取JavaScript更改以传播到我在本地主机上运行的应用程序而在开发环境中苦苦挣扎。

说明发现问题的步骤:

  • 如果刷新视图,则可以在控制台中看到webpacker正在编译的视图。
  • 它以公共/包admin-7c69920b702f68258e99.js的形式生成新的缓存耗尽的资产
  • manifest.json反映了此更新"admin.js": "/packs/admin-7c69920b702f68258e99.js"
  • 我可以重复刷新视图,但是“网络”选项卡显示旧资产称为admin-4cf5f7c7d6c5ad665fc6.js

我尝试了以下过程,但是即使禁用了缓存,它也不会触发资产的刷新。

  • 刷新浏览器中的视图以触发webpack编译
  • 通过退出Docker并运行docker-compose up
  • 重新启动Rails服务器
  • 刷新视图

我通常必须第二次停止并启动Rails服务器才能触发资产刷新。对于有效的开发环境来说,这有点像巫毒教。

我想找到一种方法来可靠地确保最新资产反映在我的开发环境中,而不必手动在资产文件名上保留选项卡以确认刷新已发生。

是否有技巧可以重新装入可能会丢失的资产?

我正在使用ruby:2.3.7和Rails 5.2.2.1

1 个答案:

答案 0 :(得分:0)

我设法解决了这个问题,现在可以重新加载我的JavaScript资产。

我遇到的第一个问题最容易解决,立即解决了在本地计算机上运行的团队成员的问题(即不在Docker容器中)。

  • webpacker配置文件webpacker.yml具有一系列默认值,并且cache_manifest设置为true。这可以解释为什么感觉好像浏览器正在坚持一个旧指令。通过设置cache_manifest: false
  • 解决

这不能立即解决在Docker中运行的应用程序的问题。显然,您需要将webpacker设置为在其自己的容器中运行。请参阅此处的官方Webpacker说明:https://github.com/rails/webpacker/blob/master/docs/docker.md

我发现以下说明最有用:http://paulsturgess.co.uk/blog/2018/01/09/setup-webpacker-webpack-dev-server-with-docker-compose/

  • 因此我已将以下内容添加到我的docker-compose.yml

    版本:“ 3” 服务:   webpacker:     建立:。     环境:       -WEBPACKER_DEV_SERVER_PUBLIC =本地主机:3035       -WEBPACKER_DEV_SERVER_HOST =本地主机     命令:./bin/webpack-dev-server --inline true     数量:       -。:/ myapp     端口:       -'3035:3035'

  • 然后运行docker-compose up --build

这神奇地解决了重新加载问题。