如何让 Sinatra 在每次更改后自动重新加载文件?

我在吸毒

# my_app.rb
load 'index.rb'

然后像这样启动服务器

ruby my_app.rb

但它从来没有重新加载任何更改,我在索引页。
我错过什么了吗?

47851 次浏览

看看 Sinatra 常见问题解答,

“如何使我的 Sinatra 应用程序在更改时重新加载?”

首先,在 Ruby 中重新加载进程内代码很困难,而且 适用于所有场景的解决方案在技术上是不可能的。

这就是为什么我们建议您进行进程外重新加载。

首先,如果你还没有安装 重播,你需要安装:

 $ gem install rerun

现在,如果你像这样启动你的 Sinatra 应用程序:

$ ruby app.rb

重新加载所需要做的就是这样做:

$ rerun 'ruby app.rb'

如果你正在使用的例子,球拍,而不是 如下:

$ rerun 'rackup'

你懂的。

如果仍然需要进程内重新加载,请查看 Sinatra::Reloader

Gem install sinatra-reloader

require 'sinatra'
require 'sinatra/reloader'

注意 : 它只会重新加载 sinatra 处理程序(可能还有一些 sinatra 服务器配置命令) ,但不会重新加载必须手动重新加载的自定义文件。

9年后的 UPD: 似乎已经可以使用 also_reloaddont_reloadafter_reload重新加载其他文件了—— https://github.com/sinatra/sinatra/pull/1150

Gem install sinatra-reloader

require 'sinatra/base'
require "sinatra/reloader"


class MyApp < Sinatra::Base
register Sinatra::Reloader


get '/' do
"Hello Testing1!"
end
end

你可能需要设置开发环境变量并有条件地加载 gem。

使用 独立乘客运行应用程序时,只需创建一个 tmp/always_restart文件:

$ touch tmp/always_restart.txt

有关详细信息,请参阅乘客 文件

您可以使用 rerun gem。

gem install rerun
rerun 'ruby app.rb'

或者,如果你使用的是球拍

rerun 'rackup'

你可以使用防护架。从 文章发表在 dlock.org上提起:

把这个添加到你的 Gemfile:

group :development do
gem "guard"
gem "guard-bundler"
gem "guard-rack"
end

然后,使用以下内容在项目的根目录中创建一个 Guardfile:

guard 'bundler' do
watch('Gemfile')
end


guard 'rack' do
watch('Gemfile.lock')
watch(%r{^(config|app|api)/.*})
end

最后,运行警卫,像这样: bundle exec guard,和 rackup将重新加载每次。

在 Windows 上,我使用我的 重启 gem进行以下操作:

restart ruby my_app.rb

或者,用球拍:

restart rackup

请参阅 给你了解更多信息,希望对您有所帮助。

I like the Shotgun gem. If you're using a modular Sinatra app and have a config.ru file it's easy to run.

shotgun config.ru

检查宝石出 给你。它是相当直接的,没有配置需要。

如果您只更改模板,那么如果您将环境设置为开发,sinatra 将总是重新呈现它们:

ruby app.rb -e development