Rails-Deployment für Passenger mit Capistrano 0

Posted by fwoeck
on Monday, October 06

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.

Comments

Leave a response

Comment