Deploy Sinatra Application with Capistrano
May 25, 2010 - Comments
Step 0: Vendor the sinatra gem (optional).
mkdir vendor cd vendor gem unpack sinatra mv sinatra-* sinatra
Step 1. Create a config.ru Rack file in your project's root directory.
require 'rubygems' require 'vendor/sinatra/lib/sinatra.rb' set :public, File.expand_path(File.dirname(__FILE__) + '/public/index.html') # Include your public folder set :views, File.expand_path(File.dirname(__FILE__) + '/views/index.html') # Include the views set :environment, :production disable :run, :reload require 'app_file' # replace this with your sinatra app file run Sinatra::Application
Step 2. Create a Capistrano deploy file.
This file should live at config/deploy.rb.
set :domain, "yourdomain.com" set :application, "app_name" set :deploy_to, "/var/www/apps/#{domain}" set :user, "your_deploy_user" set :use_sudo, false set :scm, :git set :repository, "git@github.com:you/application.git" set :branch, 'master' set :git_shallow_clone, 1 role :web, domain role :app, domain role :db, domain, :primary => true set :deploy_via, :remote_cache namespace :deploy do task :start do ; end task :stop do ; end # Assumes you are using Passenger task :restart, :roles => :app, :except => { :no_release => true } do run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" end task :finalize_update, :except => { :no_release => true } do run "chmod -R g+w #{latest_release}" if fetch(:group_writable, true) # mkdir -p is making sure that the directories are there for some SCM's that don't save empty folders run <<-CMD rm -rf #{latest_release}/log && mkdir -p #{latest_release}/public && mkdir -p #{latest_release}/tmp && ln -s #{shared_path}/log #{latest_release}/log CMD if fetch(:normalize_asset_timestamps, true) stamp = Time.now.utc.strftime("%Y%m%d%H%M.%S") asset_paths = %w(images css).map { |p| "#{latest_release}/public/#{p}" }.join(" ") run "find #{asset_paths} -exec touch -t #{stamp} {} ';'; true", :env => { "TZ" => "UTC" } end end end
Step 3: Deploy the app.
cap deploy:setup cap deploy
Step 4: Get a beer, you're done!
Tagged: capistranosinatra