Sinatra 0.9 on Dreamhost
There is lots of good information out there on how to deploy Sinatra apps to Dreamhost but they don’t really cover off the Sinatara 0.9 release which unfortunately depends on a newer version of the Rack gem that dreamhost does not yet have installed. The missing piece of the puzzle was that you can actually override the Rack that Passenger loads by vendoring Rack and requiring it in your config.ru file.
require 'rubygems'
require 'vendor/rack/lib/rack'
require 'vendor/sinatra/lib/sinatra'
disable :run
set :app_file, 'yourapp.rb'
set :views, '/full/path/views'
require 'yourapp'
run Sinatra::Application
Now just to tidy things up and prevent me from having junk in my repository I updated my Capistrano script to gem install Sinatra/Rack and unpack them to /vendor on deploy:setup.
after 'deploy:setup', 'vendor_gems:install_and_unpack'
after 'deploy:update_code', 'vendor_gems:symlink'
namespace :vendor_gems do
task :install_and_unpack do
run 'gem install sinatra -v 0.9.0.4' # Also installs rack 0.9.1
run "cd #{shared_path}/system && gem unpack rack && mv rack-* rack"
run "cd #{shared_path}/system && gem unpack sinatra && mv sinatra-* sinatra"
end
task :symlink do
run "mkdir -p #{release_path}/vendor/"
run "ln -nfs #{shared_path}/system/rack #{release_path}/vendor/rack"
run "ln -nfs #{shared_path}/system/sinatra #{release_path}/vendor/sinatra"
end
end
Now I am a pretty happy camper as my move back to shared hosting seems to be going quite well so far. Thanks Passenger!
PS. If you’re interested in trying Dreamhost you should know that they have a pretty generous affiliate program. You can use my affiliate link or a friends, but either way you should make sure someone benefits from it when you signup.