我正在使用
# my_app.rb
load 'index.rb'
并像这样启动服务器
ruby my_app.rb
但是它从未重新加载我在首页所做的任何更改。
我错过了什么吗?
查看Sinatra FAQ,
首先,在Ruby中进行进程内代码重新加载很困难,并且对于每种情况都有一个适用的解决方案在技术上是不可能的。
这就是为什么我们建议您采用进程外重新加载。
首先,如果您尚未安装rerun,则需要安装:
$ gem install rerun
现在,如果您以以下方式启动Sinatra应用程序:
$ ruby app.rb
重新加载的全部操作只需要这样做:
$ rerun 'ruby app.rb'
如果您例如使用rackup,请改用以下方法:
$ rerun 'rackup'
你懂的。
如果您仍然希望进行进程内重载,请查看
Sinatra::Reloader
。
使用gem安装sinatra-reloader
require 'sinatra'
require 'sinatra/reloader'
注意:它仅会重新加载Sinatra处理程序(可能还包括一些Sinatra服务器配置命令),但不会重新加载自定义文件,您必须手动重新加载。
9年后的更新:看起来现在可以使用also_reload
、dont_reload
和after_reload
重新加载其他文件-- https://github.com/sinatra/sinatra/pull/1150
require "./my-file"
但没有成功。 - kristianlmrequire
不会重新加载已经被引用的文件。你需要使用 load
来实现。 - Nakilonserver.rb
文件,才能重新加载我的外部文件。它不会单独检查我的外部文件,所以每次我对外部文件进行更改时,都必须重新保存我的 server.rb
文件。shotgun 在这方面似乎工作得更好,但它似乎也重新加载数据库会话。 - kristianlmalso_reload
方法指定需要重新加载的文件:configure :development do |c|
require 'sinatra/reloader'
c.also_reload "./lib/*.rb"
c.also_reload "./controllers/*.rb"
c.also_reload "./init/*.rb"
end
- Opptatt Jobber你可以使用 rerun
gem。
gem install rerun
rerun 'ruby app.rb'
或者如果你正在使用rackup
rerun 'rackup'
安装sinatra-reloader gem
require 'sinatra/base'
require "sinatra/reloader"
class MyApp < Sinatra::Base
register Sinatra::Reloader
get '/' do
"Hello Testing1!"
end
end
你可能希望将环境变量设置为开发环境,并有条件地加载宝石库。
tmp/always_restart
文件即可:$ touch tmp/always_restart.txt
查看乘客文档以获取更多信息。
我喜欢Shotgun宝石。如果你正在使用模块化的Sinatra应用程序并且有一个config.ru文件,那么很容易运行。
shotgun config.ru
请点击这里查看这个宝石。它非常简单,无需配置。
restart ruby my_app.rb
或者,使用rackup:
restart rackup
更多信息请参见此处,希望您会觉得有用。
将以下内容添加到您的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
。如果你只更改了模板,sinatra将始终在开发环境下重新渲染它们:
ruby app.rb -e development
rerun
命令的小补充。你不必局限于默认选项,例如rerun 'rackup'
。你可以在任何端口上运行任何服务器。以下是一个示例,演示如何在5678端口上运行Puma —rerun 'rackup -s puma -p 5678 app/sinatra/config.ru'
。 - sashaegorov