【问题标题】:Webpacker & Rails Asset Pipeline in Docker - View is not pointing to updated JS assetDocker 中的 Webpacker 和 Rails 资产管道 - 视图未指向更新的 JS 资产
【发布时间】:2019-05-23 11:10:36
【问题描述】:

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

识别问题的步骤描述:

  • 如果我刷新视图,我可以在控制台中看到 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

【问题讨论】:

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


    【解决方案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

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

    【讨论】:

      猜你喜欢
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 2021-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多