このスレッドRack::Reload
に従って設定しました
# config.ru
require 'rubygems'
require 'sinatra'
set :environment, :development
require 'app'
run Sinatra::Application
# app.rb
class Sinatra::Reloader < Rack::Reloader
def safe_load(file, mtime, stderr = $stderr)
if file == Sinatra::Application.app_file
::Sinatra::Application.reset!
stderr.puts "#{self.class}: reseting routes"
end
super
end
end
configure(:development) { use Sinatra::Reloader }
get '/' do
'foo'
end
thin viathin start -R config.ru
で実行していますが、新しく追加されたルートのみをリロードします。既存のルートを変更しても、古いコードが引き続き実行されます。
新しいルートを追加すると、正しくリロードされるため、アクセスできますが、他には何もリロードしません。
たとえば、ルートを次のように変更した場合
get '/' do
'bar'
end
get '/foo' do
'baz'
end
それが変更されたとしても、/
引き続き を提供しますが、正しくリロードして を提供します。foo
/foo
baz
これは正常な動作ですか、それとも何か不足していますか? ソースファイル全体がリロードされると思います。今考えられる唯一の方法は、ファイルシステムが変更されたときに Web サーバー全体を再起動することです。
Windows Vista x64で実行しているため、fork()
.