Vlad the Deployer makes it easy to deploy your Rails projects, however the documentation didn’t make it easy to cobble together the bits I needed. After Googling and reading I have successfully set up Vlad for my project so I’m documenting my process for anyone else that might need a hand.
Here’s my setup:
- Git ( self-hosted Gitosis repository )
- Rails 2.3.5
- Vlad 2.0.2
- Vlad-Git 2.1.0
- Apache 2.2
- Phusion Passenger 2.2.11
- Debian Lenny ( Linode server )
- Snow Leopard ( development machine )
Install Vlad
The Vlad gem supports Subversion so you also need to install the gem/plugin for Git support.
sudo gem install vlad
sudo gem install vlad-git
Import vlad’s Rake tasks. You can add this to your main Rakefile or create lib/tasks/vlad.rake.
begin
require ‘vlad’
Vlad.load :app => :passenger, :scm => :git
rescue LoadError
# do nothing
end
rake vlad:setup
You only need to run this task once – to create the :deploy_to directory on the server. It should contain the following directory structure:
scm/
releases/
shared/log/
shared/pids/
shared/system/
config/deploy.rb
Because I don’t like to keep passwords in version control I set up a shared/config directory and put my database.yml there. I added a Rake task to my deploy.rb that copies the contents of my shared directory into the current release.
set :user, “deploy”
set :application, “myApp”
set :repository, “gitosis@myserver.com:#{application}.git”
set :deploy_to, “/path/to/#{application}”
set :domain, “#{user}@myserver.com”
set :web_command, “sudo apache2ctl”namespace :vlad do
remote_task :copy_config_files, :roles => :app do
run “cp #{shared_path}/config/* #{current_path}/config/”
end
endnamespace :vlad do
task :deploy => %w[
vlad:update
vlad:copy_config_files
vlad:migrate
vlad:start
vlad:cleanup
]
end
vlad tasks
rake vlad:setup– Used to set up the initial directory structure on the remote server.rake vlad:update– Vlad removes everything fromscm/repoand replaces it with a fresh clone of the Git repository and points the current symlink in the deploy directory to the new release.rake vlad:migrate– This task runsrake db:migrate RAILS_ENV=productionfor the current deployment on the server.rake vlad:start– This task restarts the application by touchingtmp/restart.txtand restarts the web server usingapache2ctl.rake vlad:cleanup– This task will remove all but the last 5 deployed releases.rake vlad:deploy– The Rake task for a full deploy.
