2016-01-15 4 views
0

Рассмотрим config.ru файл:Rack :: Reloader не подбирая изменения

require 'sinatra' 

use Rack::Reloader, 0 

get '/' do 
    'hi' 
end 

run Sinatra::Application 

Я запустить его из командной строки с thin start. Приложение запускается и показывает hi, когда я ударил localhost:3000. Если теперь я изменю hi на hello, сохраните файл и перезагрузите страницу, изменение не появится: страница все еще говорит hi.

Почему Rack::Reloader не работает в этом случае? Могу ли я что-либо изменить, чтобы заставить его работать?

ответ

2

См. here для подробного объяснения происходящего. Essentialy каждый раз, когда ваш файл изменен, Rack::Reloader требует его повторного использования.

К сожалению, с помощью Sinatra, если вы повторно определяете маршрут во второй раз (что происходит, когда вы требуете повторного запроса), синатра игнорирует новое определение, поскольку get '/' do end уже определен!

Что вам нужно сделать, это сбросить любые определенные маршруты у вас есть, а также:

# inside app.rb 

require 'sinatra' 
require 'rack' 

configure :development do 
    Sinatra::Application.reset! 
    use Rack::Reloader 
end 

get '/' do 
    'hi' 
end 

Обратите внимание, что иногда это занимает несколько секунд (5S на моей машине) для изменения перезагрузиться, и я рекомендую вы принимаете look at the alternatives here