Docker 中的 Webpacker & Rails 资产管道 - 视图未指向更新的 JS 资产
Webpacker & Rails Asset Pipeline in Docker - View is not pointing to updated JS asset
我是 运行 一个 Rails 应用程序,在 Docker 容器中,但我正在为我的开发环境而苦苦挣扎,因为我无法可靠地让 javascript 更改传播通过到我在本地主机的应用 运行。
问题识别步骤说明:
- 如果我刷新视图,我可以在控制台中看到 webpacker 正在编译。
- 它在 public/packs
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
我已设法解决问题,现在可以实时重新加载我的 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
中添加了以下内容
version: '3'
services:
webpacker:
build: .
environment:
- WEBPACKER_DEV_SERVER_PUBLIC=localhost:3035
- WEBPACKER_DEV_SERVER_HOST=localhost
command: ./bin/webpack-dev-server --inline true
volumes:
- .:/myapp
ports:
- '3035:3035'
- 然后运行
docker-compose up --build
这神奇地解决了重新加载问题。
我是 运行 一个 Rails 应用程序,在 Docker 容器中,但我正在为我的开发环境而苦苦挣扎,因为我无法可靠地让 javascript 更改传播通过到我在本地主机的应用 运行。
问题识别步骤说明:
- 如果我刷新视图,我可以在控制台中看到 webpacker 正在编译。
- 它在 public/packs
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
我已设法解决问题,现在可以实时重新加载我的 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
中添加了以下内容
version: '3'
services:
webpacker:
build: .
environment:
- WEBPACKER_DEV_SERVER_PUBLIC=localhost:3035
- WEBPACKER_DEV_SERVER_HOST=localhost
command: ./bin/webpack-dev-server --inline true
volumes:
- .:/myapp
ports:
- '3035:3035'
- 然后运行
docker-compose up --build
这神奇地解决了重新加载问题。