I recently moved most of the sites I'm maintaining over to Media Temple's Grid Server hosting service because I was having no luck getting Rails apps deployed on Dreamhost. I gather that people much brighter than me have gotten Rails apps running on Dreamhost without any difficulties, but I just wasn't able to get it working myself and was looking to move hosts in any case.
I chose Media Temple in large part because of their focus on Rails Containers and because of the tools they've built that make it easy to get up and running. It doesn't hurt that they've got pretty reasonable prices, too.
One of the main things that got me interested in Rails is that its "opinionated" nature starts you off on the right foot. Rails apps have development, testing, and production environments from the start, which makes it very easy to make changes to live apps without worrying about screwing things up. Capistrano makes the deployment part of creating and maintaining Rails apps extremely easy. The only thing is that you've got to create a "deployment recipe" for use on your web host's servers.
Here is the Capistrano Deployment Recipe (deploy.rb) that I put together for Media Temple. If you've followed the instructions in the Server Guide for how to prepare your (gs) for Rails hosting, just set the proper passwords and stuff in the first few lines and you should be good to go. Enjoy!
require 'mt-capistrano' set :site, "0000" set :application, "appname" set :webpath, "app.com" set :domain, "primarydomain.com" set :user, "serveradmin%primarydomain.com" set :password, "password" ssh_options[:username] = 'serveradmin%primarydomain.com' set :repository, "svn+ssh://#{user}@#{domain}/home/#{site}/data/svn/#{application}/trunk" set :deploy_to, "/home/#{site}/containers/rails/#{application}" set :checkout, "export" role :web, "#{domain}" role :app, "#{domain}" role :db, "#{domain}", :primary => true task :after_update_code, :roles => :app do put(File.read('config/database.yml'), "#{release_path}/config/database.yml", :mode => 0444) end task :restart, :roles => :app do run "mtr restart #{application} -u #{user} -p #{password}" run "mtr generate_htaccess #{application} -u #{user} -p #{password}" migrate end
I originally posted this code on the Rails Weenie forums, but I thought it might be good to post it here so that it doesn't get lost. This blog post also provided some serious help when I was setting things up, and I think it's worth a read as well.
If you're brand new to Capistrano, you'll have to first install the gems for "capistrano" and Media Temple's "mt-capistrano" like you would with any other gem. You'll also want to have Subversion set up for your code repository. If you don't have SSH keys set up, I think you can add ssh_options[:password] to the recipe instead.

Hey Trevor,
Thanks for the recipe! It’s a very helpful in setting up Capistrano and deploying Rails on (mt) the ‘right’ way.
thanks,
Alastair