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

我在用

# my_app.rb load 'index.rb' 

并像这样启动服务器

 ruby my_app.rb 

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

请参阅Sinatra FAQ ,

“如何让我的Sinatra应用程序重新加载更改?

首先,Ruby中的进程内代码重新加载非常困难,并且针对每种情况都有一个解决scheme在技术上是不可能的。

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

首先,如果您尚未安装,则需要安装重新运行 :

  $ gem install rerun 

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

 $ ruby app.rb 

所有你需要做的重新加载,而不是做这个:

 $ rerun 'ruby app.rb' 

如果您是例如使用机架,请执行以下操作:

$ rerun'rackup'

你明白了。

如果你还想在进程中重新加载,请查看Sinatra::Reloader

gem安装sinatra-reloader

 require 'sinatra' require 'sinatra/reloader' 

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

你可以使用rerungem。

 gem install rerun rerun 'ruby app.rb' 

或者如果你正在使用机架

 rerun 'rackup' 

gem安装sinatra-reloader

 require 'sinatra/base' require "sinatra/reloader" class MyApp < Sinatra::Base register Sinatra::Reloader get '/' do "Hello Testing1!" end end 

你可能想要设置环境variables来开发和有条件地加载gem。

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

 $ touch tmp/always_restart.txt 

请参阅Passenger 文档以获取更多信息。

我喜欢猎枪gem。 如果您使用的是模块化的Sinatra应用程序,并且拥有config.ru文件,那么运行起来非常简单。

 shotgun config.ru 

在这里检查gem。 这是相当直接的,不需要configuration。

在Windows上,我正在使用我的重新启动gem :

 restart ruby my_app.rb 

或者,通过机架:

 restart rackup 

在这里看到更多的信息,希望你觉得它有用。

你可以使用护栏。 从dblock.org上的文章中解脱出来 :

将此添加到您的Gemfile中:

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

然后,使用以下内容在项目的根目录下创buildGuardfile

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

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

如果你只是改变你的模板,那么如果你把你的环境设置为开发的话,那么sinatra总是会重新渲染它们:

 ruby app.rb -e development