如何让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命令),而不是自定义文件,您必须手动重新加载。
你可以使用rerun
gem。
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