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

Webpacker & Rails Asset Pipeline in Docker - View is not pointing to updated JS asset

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

问题识别步骤说明:

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

我通常必须停止并再次启动 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

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