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

ez.*_*ez. 115 ruby sinatra

我在用

# my_app.rb
load 'index.rb'
Run Code Online (Sandbox Code Playgroud)

并像这样启动服务器

ruby my_app.rb
Run Code Online (Sandbox Code Playgroud)

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

dbr*_*dbr 197

请参阅Sinatra常见问题解答,

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

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

这就是我们建议您进行进程外重新加载的原因.

首先,如果您还没有安装,则需要重新运行:

 $ gem install rerun
Run Code Online (Sandbox Code Playgroud)

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

$ ruby app.rb
Run Code Online (Sandbox Code Playgroud)

你需要做的所有重新加载都是这样做的:

$ rerun 'ruby app.rb'
Run Code Online (Sandbox Code Playgroud)

如果您是使用rackup,请执行以下操作:

$ rerun'stackup'

你明白了.

如果您仍想要进行重新加载,请查看Sinatra::Reloader.

  • 但是,霰弹枪不适用于Windows (3认同)

Nak*_*lon 43

gem install sinatra-reloader

require 'sinatra'
require 'sinatra/reloader'
Run Code Online (Sandbox Code Playgroud)

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

  • 使用all_reload方法指定要重新加载的文件:`configure:development do | c | 要求'sinatra/reloader'c.also_reload"./lib/*.rb"c.also_reload"./ controllers/*.rb"c.also_reload"./ init/*.rb"end` (9认同)

zer*_*one 11

你可以使用rerun宝石.

gem install rerun
rerun 'ruby app.rb' 
Run Code Online (Sandbox Code Playgroud)

或者如果你使用的是机架式

rerun 'rackup'
Run Code Online (Sandbox Code Playgroud)


raf*_*ude 7

gem install sinatra-reloader

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

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

  get '/' do
    "Hello Testing1!"
  end
end
Run Code Online (Sandbox Code Playgroud)

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


kar*_*rmi 6

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

$ touch tmp/always_restart.txt
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Passenger 文档.


小智 5

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

shotgun config.ru
Run Code Online (Sandbox Code Playgroud)

这里检查宝石.它非常简单,无需配置.