Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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 Sinatra::重新加载程序未在Docker容器中重新加载文件_Ruby_Docker_Sinatra - Fatal编程技术网

Ruby Sinatra::重新加载程序未在Docker容器中重新加载文件

Ruby Sinatra::重新加载程序未在Docker容器中重新加载文件,ruby,docker,sinatra,Ruby,Docker,Sinatra,我正在尝试在Docker容器中设置一个简单的sinatra应用程序。我已使用config.ru在机架上安装模块化Sinatra应用程序: require 'rubygems' require 'sinatra' require "sinatra/reloader" Dir[File.dirname(__FILE__) + '/controllers/*.rb'].each {|file| require file} #map controllers map('/') {run WebCont

我正在尝试在Docker容器中设置一个简单的sinatra应用程序。我已使用
config.ru
在机架上安装模块化Sinatra应用程序:

require 'rubygems'
require 'sinatra'
require "sinatra/reloader"

Dir[File.dirname(__FILE__) + '/controllers/*.rb'].each {|file| require file}

#map controllers
map('/') {run WebController}
单控制器
/controllers/hello.rb

class WebController < Sinatra::Base

  register Sinatra::Reloader

  get '/' do
    "Hello World"
  end

  get '/test' do
    "Hello World I'm a docker app"
  end
end
Gemfile

source 'https://rubygems.org'

gem 'rack'
gem 'rack-test'
gem 'sinatra'
gem 'sinatra-contrib'
运行时
docker run-p 3000:3000 sinatra
WEBrick输出:

[2019-02-24 20:43:08] INFO  WEBrick 1.3.1
[2019-02-24 20:43:08] INFO  ruby 2.4.0 (2016-12-24) [x86_64-linux]
[2019-02-24 20:43:08] INFO  WEBrick::HTTPServer#start: pid=1 port=3000
问题是,在docker容器中运行时,Sinatra::Reloader不再刷新修改过的控制器文件

我尝试在主机上运行相同的命令
bundle exec rackup-o 0.0.0-p 3000
,并按预期重新加载。如果在刷新
localhost:3000上的页面后编辑
/controllers/hello.rb
,将立即显示更改

当我在Docker中运行相同的应用程序时,重新加载停止工作


谢谢你的帮助,tnx

你的问题在于Docker:一旦构建了一个图像,你就不能(轻松地)再改变它的内容,除非重新构建它。因此,当您在主机系统上更改controller/hello.rb的内容时,更改不会在映像内部传播。您可以这样做,这样您在主机系统中所做的任何更改都将在容器内部传播(只是不要忘记在部署之前重建它!)。您可以归档以便于维护

你的问题在于Docker:一旦构建了一个图像,你就不能(轻松地)再改变它的内容,除非重新构建它。因此,当您在主机系统上更改controller/hello.rb的内容时,更改不会在映像内部传播。您可以这样做,这样您在主机系统中所做的任何更改都将在容器内部传播(只是不要忘记在部署之前重建它!)。您可以归档以便于维护

是的,在第一次尝试中,我没有使用docker compose,一旦我设置了它,并同步了卷,一切都正常了。tnx;)是的,在第一次尝试中,我没有使用docker compose,一旦我设置了它,并同步了卷,一切都正常了。tnx;)
[2019-02-24 20:43:08] INFO  WEBrick 1.3.1
[2019-02-24 20:43:08] INFO  ruby 2.4.0 (2016-12-24) [x86_64-linux]
[2019-02-24 20:43:08] INFO  WEBrick::HTTPServer#start: pid=1 port=3000