gpt4 book ai didi

ruby-on-rails - Webpacker 到 Docker 中的 Rails Assets 管道 - View 未指向更新 JS Assets

转载 作者:行者123 更新时间:2023-12-02 18:28:03 26 4
gpt4 key购买 nike

我在 Docker 容器中运行 Rails 应用程序,但我在开发环境中苦苦挣扎,因为我无法可靠地让 javascript 更改传播到我在本地主机上运行的应用程序。

识别问题的步骤说明:

  • 如果我刷新 View ,我可以在控制台中看到 webpacker 正在编译。
  • 它在 public/packs admin-7c69920b702f68258e99.js
  • 中生成一个新的缓存清除 Assets
  • manifest.json 反射(reflect)了这个更新 "admin.js": "/packs/admin-7c69920b702f68258e99.js"
  • 我可以反复刷新 View ,但网络选项卡显示旧 Assets 名为 admin-4cf5f7c7d6c5ad665fc6.js

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

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

我通常必须停止并再次启动 Rails 服务器才能触发 Assets 刷新。对于有效的开发环境来说,这感觉有点太像巫术了。

我想找到一种方法来可靠地确保最新的 Assets 反射(reflect)在我的开发环境中,而不必手动标记 Assets 文件名以确认刷新已经发生。

是否有让我可能遗漏的 Assets 重新加载的技巧?

我正在使用 ruby​​:2.3.7 和 Rails 5.2.2.1

最佳答案

我已经设法解决了这个问题,现在可以实时重新加载我的 javascript Assets 。

我遇到的第一个问题是最容易解决的,并立即解决了在本地计算机(即不在 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

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

关于ruby-on-rails - Webpacker 到 Docker 中的 Rails Assets 管道 - View 未指向更新 JS Assets ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56273947/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com