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

时间:2009-08-07 21:34:47

标签: ruby sinatra

我正在使用

# my_app.rb
load 'index.rb'

并像这样启动服务器

ruby my_app.rb

但它永远不会重新加载我在索引页面中所做的任何更改 我在这里错过了什么吗?

9 个答案:

答案 0 :(得分:193)

请参阅Sinatra FAQ

"How do I make my Sinatra app reload on changes?"

  

首先,Ruby中的进程内代码重新加载很难并且有一个   适用于每种情况的解决方案在技术上是不可能的。

     

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

     

如果您还没有安装rerun,首先需要安装:

 $ gem install rerun
     

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

$ ruby app.rb
     

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

$ rerun 'ruby app.rb'
     

如果你是使用rackup,而是做   以下内容:

     

$ rerun'stackup'

     

你明白了。

     

如果您仍希望进行中重新加载,请查看Sinatra::Reloader

答案 1 :(得分:42)

  

gem install sinatra-reloader

require 'sinatra'
require 'sinatra/reloader'

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

答案 2 :(得分:11)

您可以使用rerun gem。

gem install rerun
rerun 'ruby app.rb' 

如果您正在使用rackup

rerun 'rackup'

答案 3 :(得分:7)

gem install sinatra-reloader

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

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

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

您可能希望将环境变量设置为开发并有条件地加载gem。

答案 4 :(得分:6)

使用Passenger Standalone运行应用程序时,只需创建一个tmp/always_restart文件:

$ touch tmp/always_restart.txt

有关详情,请参阅乘客documentation

答案 5 :(得分:5)

我喜欢Shotgun宝石。如果您使用的是模块化的Sinatra应用程序并且有一个config.ru文件,那么它很容易运行。

shotgun config.ru

检查宝石here。它非常简单,无需配置。

答案 6 :(得分:4)

在Windows上,我正在使用restart gem

restart ruby my_app.rb

或者,使用rackup:

restart rackup

有关详情,请参阅here,希望您觉得它很有用。

答案 7 :(得分:1)

你可以使用防护架。取自article at dblock.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

最后,运行Guard,如下所示:bundle exec guardrackup每次都会重新加载。

答案 8 :(得分:0)

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

ruby app.rb -e development