Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Webpacker&;Docker-View中的Rails资源管道未指向更新的JS资源_Ruby On Rails_Docker_Asset Pipeline_Webpacker - Fatal编程技术网

Ruby on rails Webpacker&;Docker-View中的Rails资源管道未指向更新的JS资源

Ruby on rails Webpacker&;Docker-View中的Rails资源管道未指向更新的JS资源,ruby-on-rails,docker,asset-pipeline,webpacker,Ruby On Rails,Docker,Asset Pipeline,Webpacker,我在Docker容器中运行Rails应用程序,但我在开发环境中挣扎,因为我无法可靠地将javascript更改传播到在localhost上运行的应用程序 识别问题的步骤说明: 如果我刷新视图,我可以在控制台中看到webpacker正在编译 它在public/packsadmin-7c69920b702f68258e99.js manifest.json反映了此更新“admin.js”:“/packs/admin-7c69920b702f68258e99.js” 我可以反复刷新视图,但网络选项卡

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

识别问题的步骤说明:

  • 如果我刷新视图,我可以在控制台中看到webpacker正在编译
  • 它在public/packs
    admin-7c69920b702f68258e99.js
  • manifest.json反映了此更新
    “admin.js”:“/packs/admin-7c69920b702f68258e99.js”
  • 我可以反复刷新视图,但网络选项卡显示旧资源名为
    admin-4cf5f7c7d6c5ad665fc6.js
我尝试了以下过程,但即使在禁用缓存的情况下也不会触发资产刷新

  • 刷新浏览器中的视图以触发网页包编译
  • 通过崩溃Docker并运行
    Docker compose up
  • 刷新视图
我通常需要第二次停止并启动Rails服务器来触发资产刷新。对于一个有效的开发环境来说,这感觉有点像巫毒

我希望找到一种可靠的方法来确保最新的资产反映在我的开发环境中,而不必手动记录资产文件名以确认刷新已经发生

是否有一个让我可能丢失的资产重新加载的技巧


我正在使用ruby:2.3.7和Rails 5.2.2.1

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

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

  • webpacker配置文件
    webpacker.yml
    有一系列默认值,其中cache_manifest设置为true。这可以解释为什么浏览器感觉像是在保留旧指令。通过设置
    cache\u清单:false解决
这并没有立即解决Docker中运行的应用程序的问题。显然,您需要将webpacker设置为在自己的容器中运行。请参见此处的官方webpacker说明:

我发现以下说明非常有用:

  • 因此,我将以下内容添加到我的
    docker compose.yml
  • 然后运行
    docker compose-up--build
这神奇地解决了重新加载问题

    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'