我在用
# my_app.rb
load 'index.rb'
并像这样启动服务器
ruby my_app.rb
但它永远不会重新加载我在索引页面中所做的任何更改。
我在这里错过了什么吗?
请参阅Sinatra 常见问题解答,
首先,在 Ruby 中重新加载进程内代码很困难,并且拥有适用于所有场景的解决方案在技术上是不可能的。
这就是为什么我们建议您进行进程外重新加载。
首先,如果您还没有安装rerun :
$ gem install rerun
现在,如果您像这样启动您的 Sinatra 应用程序:
$ ruby app.rb
重新加载所需要做的就是这样做:
$ rerun 'ruby app.rb'
例如,如果您使用 rackup,请执行以下操作:
$ 重新运行“机架”
你明白了。
如果您仍想进行进程内重新加载,请查看
Sinatra::Reloader
.
gem 安装 sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
注意:它只会重新加载 sinatra 处理程序(可能还有一些 sinatra 服务器配置命令),但不会重新加载您必须手动重新加载的自定义文件。
9年后的UPD:似乎已经可以使用重新加载其他文件also_reload
,dont_reload
并且after_reload
-- https://github.com/sinatra/sinatra/pull/1150
你可以使用rerun
宝石。
gem install rerun
rerun 'ruby app.rb'
或者,如果您使用的是 rackup
rerun 'rackup'
gem 安装 sinatra-reloader
require 'sinatra/base'
require "sinatra/reloader"
class MyApp < Sinatra::Base
register Sinatra::Reloader
get '/' do
"Hello Testing1!"
end
end
您可能希望将环境变量设置为开发并有条件地加载 gem。
当您使用Passenger Standalone运行应用程序时,只需创建一个tmp/always_restart
文件:
$ touch tmp/always_restart.txt
有关详细信息,请参阅乘客文件。
我喜欢霰弹枪宝石。如果您使用的是模块化 Sinatra 应用程序并且有一个 config.ru 文件,那么它很容易运行。
shotgun config.ru
在这里查看宝石。这是相当直接的,不需要配置。
你可以使用护栏。摘自 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 guard
,并且rackup
每次都会重新加载。
如果您只更改模板,如果您将环境设置为开发,sinatra 将始终重新呈现它们:
ruby app.rb -e development