How to get Sinatra to auto-reload the file after each change?

后端 未结 9 448
梦谈多话
梦谈多话 2020-12-07 09:39

I am using

# my_app.rb
load \'index.rb\'

and start the sever like this

ruby my_app.rb

but it never relo

相关标签:
9条回答
  • 2020-12-07 09:56

    If you only change your templates sinatra will always rerender them if you set your environment to development:

    ruby app.rb -e development
    
    0 讨论(0)
  • 2020-12-07 09:59

    gem install sinatra-reloader

    require 'sinatra'
    require 'sinatra/reloader'
    

    Note: it will reload only sinatra handlers (and, maybe some sinatra server configuration commands), but not custom files, which you have to reload manually.

    UPD after 9 years: seems like it is already possible to reload other files using also_reload, dont_reload and after_reload -- https://github.com/sinatra/sinatra/pull/1150

    0 讨论(0)
  • 2020-12-07 10:02

    When you run the application with Passenger Standalone, just create a tmp/always_restart file:

    $ touch tmp/always_restart.txt
    

    See Passenger documentation for more info.

    0 讨论(0)
  • 2020-12-07 10:02

    I like the Shotgun gem. If you're using a modular Sinatra app and have a config.ru file it's easy to run.

    shotgun config.ru
    

    Check the gem out here. It's fairly straight forward and no configuration needed.

    0 讨论(0)
  • 2020-12-07 10:05

    You can use the rerun gem.

    gem install rerun
    rerun 'ruby app.rb' 
    

    OR if you are using rackup

    rerun 'rackup'
    
    0 讨论(0)
  • 2020-12-07 10:07

    See the Sinatra FAQ,

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

    First off, in-process code reloading in Ruby is hard and having a solution that works for every scenario is technically impossible.

    Which is why we recommend you to do out-of-process reloading.

    First you need to install rerun if you haven’t already:

     $ gem install rerun
    

    Now if you start your Sinatra app like this:

    $ ruby app.rb
    

    All you have to do for reloading is instead do this:

    $ rerun 'ruby app.rb'
    

    If you are for instance using rackup, instead do the following:

    $ rerun 'rackup'

    You get the idea.

    If you still want in-process reloading, check out Sinatra::Reloader.

    0 讨论(0)
提交回复
热议问题