Simple Rails3 application configured to be deployed on apache2 with fastCGI and capistrano. You need to have FastCGI library for Ruby and FastCGI module for apache2 installed.
< VirtualHost rails3_fcgi.lan:80 >
DefaultInitEnv RAILS_ENV production
DocumentRoot /home/krg/www/rails3_fcgi/current/public
< Directory /home/krg/www/rails3_fcgi/current/public >
Options ExecCGI FollowSymLinks
AllowOverride all
Order allow,deny
Allow from all
< /Directory >
< /VirtualHost >
SetEnv RAILS_RELATIVE_URL_ROOT /rails3_fcgi
RewriteEngine On
RewriteRule ^(stylesheets/.*)$ - [L]
RewriteRule ^(javascripts/.*)$ - [L]
RewriteRule ^(images/.*)$ - [L]
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ rails3_fcgi.fcgi [E=X-HTTP_AUTHORIZATION:%{HTTP:Authorization},QSA,L]
#!/usr/bin/ruby
require_relative '../config/environment'
class Rack::PathInfoRewriter
def initialize(app)
@app = app
end
def call(env)
env.delete('SCRIPT_NAME')
parts = env['REQUEST_URI'].split('?')
env['PATH_INFO'] = parts[0]
env['QUERY_STRING'] = parts[1].to_s
@app.call(env)
end
end
Rack::Handler::FastCGI.run Rack::PathInfoRewriter.new(Rails3Fcgi::Application)
Rails3Fcgi::Application.routes.draw do
my_draw = Proc.new do
resources :entities
root :to => "entities#index"
end
if ENV['RAILS_RELATIVE_URL_ROOT']
scope ENV['RAILS_RELATIVE_URL_ROOT'] do
my_draw.call
end
else
my_draw.call
end
end
set :application, "rails3_fcgi"
set :user, "krg" # The server's user for deploys
set :domain, "#{application}.lan"
set :repository, "git@github.com:dre3k/#{application}.git"
set :deploy_to, "/home/#{user}/www/#{application}"
set :scm, :git
role :web, domain # Your HTTP server, Apache/etc
role :app, domain # This may be the same as your `Web` server
role :db, domain, :primary => true # This is where Rails migrations will run
default_run_options[:pty] = true
set :use_sudo, false
ssh_options[:forward_agent] = true
set :brach, "master"
set :deploy_via, :remote_cache
set :scm_verbose, true
deploy.task :db_link do
run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
run "ln -nfs #{shared_path}/db/production.sqlite3 #{release_path}/db/production.sqlite3"
run "chmod 0777 #{release_path}/db"
end
after "deploy:update_code", "deploy:db_link"
namespace :deploy do
task :restart do
run "#{sudo} killall #{application}.fcgi"
run "wget #{domain} --spider -O -"
end
end