Capistrano2 Recipe for Slicehost
After moving from DreamHost over to Media Temple a few months ago, I ran into some issues with the Rails Containers and have since moved on to Slicehost. I’m extremely happy over there, and I’d recommend them to anyone not afraid of the command line.
Since my Capistrano Recipe for Media Temple still gets a fair amount of traffic, I figured I might as well share my new Capistrano 2 Recipe for Slicehost – specifically Debian Etch.
set :application, "eldorado"
set :repository, "http://eldorado.googlecode.com/svn/trunk/"
set :deploy_to, "/home/eldorado"
set :deploy_via, :export
set :user, 'root'
ssh_options[:port] = 22
role :app, "000.00.00.000"
role :web, "000.00.00.000"
role :db, "000.00.00.000", :primary => true
after 'deploy:update_code', 'deploy:upload_database_yml'
after 'deploy:update_code', 'deploy:create_symlinks'
namespace :deploy do
task :restart do
run "/var/lib/gems/1.8/bin/mongrel_rails stop -P #{shared_path}/log/mongrel.8000.pid"
run "/var/lib/gems/1.8/bin/mongrel_rails start -d -e production -p 8000 -P log/mongrel.8000.pid -c #{release_path}"
end
end
namespace :deploy do
task :upload_database_yml do
put(File.read('config/database.yml'), "#{release_path}/config/database.yml", :mode => 0444)
end
end
namespace :deploy do
task :create_symlinks do
%w{avatars files headers}.each do |share|
run "rm -rf #{release_path}/public/#{share}"
run "mkdir -p #{shared_path}/system/#{share}"
run "ln -nfs #{shared_path}/system/#{share} #{release_path}/public/#{share}"
end
end
end
While we’re at it, here’s the accompanying Apache config:
ServerName 127.0.0.1 NameVirtualHost *:80ServerName example.com ServerAlias www.example.com DocumentRoot /var/www/eldorado Options FollowSymLinks AllowOverride None Order allow,deny Allow from all RewriteEngine OnBalancerMember http://127.0.0.1:8000 Order deny,allow Allow from .example.com # Check for maintenance file and redirect all requests RewriteCond %{DOCUMENT_ROOT}/system/maintenance.html -f RewriteCond %{SCRIPT_FILENAME} !maintenance.html RewriteRule ^.*$ /system/maintenance.html [L] # Rewrite index to check for static RewriteRule ^/$ /index.html [QSA] # Rewrite to check for Rails cached page RewriteRule ^([^.]+)$ $1.html [QSA] # Redirect all non-static requests to cluster RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f RewriteRule ^/(.*)$ balancer://mongrel_cluster%{REQUEST_URI} [P,QSA,L] ErrorLog /home/eldorado/shared/log/error_log CustomLog /home/eldorado/shared/log/access_log combined RewriteLog /home/eldorado/shared/log/rewrite_log RewriteLogLevel 9
Of course, this would require creating a symlink in /var/www/example to your installation’s “current” directory, as set up by Capistrano:
ln -s /home/eldorado/current/public /var/www/example
This work was done on behalf of El Dorado, an open-source Rails forum I’ve been hacking away at for the last few months. I’ll post more about that soon, but you can start playing with the beta version now.
There’s also a live version of the app, which is (hopefully) up and running over at NewAthens.org. NewAthens was formerly running on a hodgepodge of PunBB, WordPress, PmWiki, Advanced Poll, and Coppermine. El Dorado represents the beginning of my attempt to create a full stack community site in Rails.
The existing database from the PunBB forum was successfully imported on Saturday using some handy Rake tasks I created, as were all of the user-uploaded files, etc. The resulting database has around 35,000 rows, and it’s been up and running without any major problems for a week now. Huzzah!