Ruby Sinatra::重新加载程序未在Docker容器中重新加载文件
我正在尝试在Docker容器中设置一个简单的sinatra应用程序。我已使用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
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