How to get Sinatra to auto-reload the file after each change?
Solution 1:
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
.
Solution 2:
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
Solution 3:
You can use the rerun
gem.
gem install rerun
rerun 'ruby app.rb'
OR if you are using rackup
rerun 'rackup'
Solution 4:
gem install sinatra-reloader
require 'sinatra/base'
require "sinatra/reloader"
class MyApp < Sinatra::Base
register Sinatra::Reloader
get '/' do
"Hello Testing1!"
end
end
You may want to set environment variable to development and conditionally load the gem.
Solution 5:
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.