代码之家  ›  专栏  ›  技术社区  ›  ez.

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

  •  112
  • ez.  · 技术社区  · 15 年前

    我正在使用

    # my_app.rb
    load 'index.rb'
    

    像这样启动服务器

    ruby my_app.rb
    

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

    9 回复  |  直到 15 年前
        1
  •  191
  •   dbr    10 年前

    Sinatra FAQ ,

    "How do I make my Sinatra app reload on changes?"

    首先,在Ruby中重新加载进程内代码是很困难的,而且 在技术上,适用于每个场景的解决方案都是不可能的。

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

    首先你需要安装 rerun 如果您还没有:

     $ gem install rerun
    

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

    $ ruby app.rb
    

    你所要做的就是重新加载:

    $ rerun 'ruby app.rb'
    

    例如,如果您正在使用rackup,请改为使用rackup 下列内容:

    $重新运行'rackup'

    你明白了。

    如果您仍想在进程中重新加载,请签出 Sinatra::Reloader .

        2
  •  42
  •   Nakilon earlonrails    14 年前

    GEM安装Sinatra重新装载机

    require 'sinatra'
    require 'sinatra/reloader'
    

    注释 :它将只重新加载Sinatra处理程序(可能还有一些Sinatra服务器配置命令),但不加载自定义文件,您必须手动重新加载这些文件。

        3
  •  11
  •   zeronone    12 年前

    你可以使用 rerun 宝石。

    gem install rerun
    rerun 'ruby app.rb' 
    

    或者如果你在使用Rackup

    rerun 'rackup'
    
        4
  •  7
  •   rafidude    13 年前

    GEM安装Sinatra重新装载机

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

    您可能需要将环境变量设置为开发并有条件地加载gem。

        5
  •  6
  •   karmi    13 年前

    当您使用 Passenger Standalone 创建一个 tmp/always_restart 文件:

    $ touch tmp/always_restart.txt
    

    见乘客 documentation 更多信息。

        6
  •  5
  •   user427390    10 年前

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

    shotgun config.ru
    

    检查宝石 here . 它相当直接,不需要配置。

        7
  •  4
  •   Vais Salikhov    10 年前

    在Windows上,我正在使用 restart gem 为此:

    restart ruby my_app.rb
    

    或者,使用rackup:

    restart rackup
    

    here 更多信息,希望你能找到有用的。

        8
  •  1
  •   jeffbyrnes Sindre Sorhus    10 年前

    你可以用防护架。从一个 article at 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
    

    最后,跑后卫,就像这样: bundle exec guard rackup 每次都会重新加载。

        9
  •  0
  •   three    7 年前

    如果只更改模板,那么如果将环境设置为“开发”,Sinatra将始终重新发送模板:

    ruby app.rb -e development