Will man eine Railsanwendung mit Capistrano an einen Webserver übertragen, der Passenger verwendet, so gibt es ein paar Kniffe, die einem das Leben leichter machen:
freeze Rails
Es hat sich gelegentlich als günstig erwiesen, Rails einzubetten:
> rake rails:freeze:gems
Capify
Nun erzeugt man die Capistrano-Konfiguration:
> capify .
Die u.a. entstandene deploy.rb-Datei verändert man wie folgt (hier für die Verwendung von git):
set :application, "anwendung"
set :repository, "."
set :user, "username"
set :deploy_to, "/var/www/#{application}"
set :use_sudo, false
set :scm, :git
set :deploy_via, :copy
set :copy_remote_dir, "/home/#{user}/tmp"
role :app, application
role :web, application
role :db, application, :primary => true
namespace :deploy do
desc "Restarting passenger with restart.txt"
task :restart, :roles => :app, :except => { :no_release => true } do
run "touch #{current_path}/tmp/restart.txt"
end
[:start, :stop].each do |t|
desc "#{t} task is a no-op with passenger"
task t, :roles => :app do ; end
end
end
lokales git-Repo
Wenn man Subversion nicht benötigt, kann man das Deployment einfach aus einem lokalen git-Repo heraus starten, das man sich zu diesem Zweck anlegt:
> git init
> git add .
> git commit -m "Initial deployment"
> svn ps svn:ignore .git .
Die Daten werden dann mit der copy-Methode kopiert und der Server muss kein externes SVN-Repo kontaktieren.
Das Deployment
Nun kann man den eigentlichen Auslieferungsvorgang starten. Einmalig wird ein Setup aufgerufen, das die Ordnerbasis auf dem Server anlegt und danach wird ein cold-Deploy gestartet, das die Applikation kopiert und die Datenbank erstmalig anlegt:
> cap deploy:setup
> cap deploy:cold
Hat man die Datenbank auf der Serverseite noch nicht angelegt, so benötigt der ausführende ssh-User genug Rechte, um dies zu tun.
Webserverkonfiguration
Durch die Ordnerstruktur der Versionierungen muss das Basisverzeichnis des Apache auf /var/www/ANWENDUNG/current/public verweisen.
Folgende Deployments
Vor jedem neuen Deployment ist es erforderlich, das git-Repo zu aktualisieren:
> git add .
> git commit -a -m "Änderungen"
Danach sorgt ein
> cap deploy:migrations
für ein neuerliches Kopieren, Migrieren und Neustarten der Applikation.