Rack::Reloader 未获取更改

Jon*_*nah 3 rack sinatra

考虑这个config.ru文件:

require 'sinatra'

use Rack::Reloader, 0

get '/' do
  'hi'
end

run Sinatra::Application
Run Code Online (Sandbox Code Playgroud)

我从命令行启动它thin starthi当我点击 时,应用程序会运行并显示localhost:3000。如果我现在更改hihello,保存文件并重新加载页面,则不会出现更改:页面仍然显示hi

为什么Rack::Reloader在这种情况下不起作用?我可以更改任何内容以使其正常工作吗?

Mar*_*cny 6

请参阅此处了解所发生情况的详细说明。本质上,每次您的文件发生更改时,Rack::Reloader都会重新需要它。

不幸的是,对于 Sinatra,如果您第二次重新定义路线(这就是您重新要求时发生的情况),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
Run Code Online (Sandbox Code Playgroud)

请注意,有时重新加载更改需要几秒钟(在我的机器上为 5 秒钟),我建议您查看此处的替代方案