Capistrano bei domainFactory installieren

Ganz allgemein ist Capistrano ein Tool, um Vorgänge, die auf einem (oder mehreren) Servern ausgeführt werden zu automatisieren.

Die in Capistrano angelegten Vorgänge können dann mit einem Einzeiler angestoßen werden und laufen automatisch durch. Setzt man dies schlau ein, kann man sich eine Menge Arbeit ersparen.

Wir wollen Capistrano zum automatischen Deployen unserer Ruby-Anwendung benutzen. Unser Rubycode ist in einem Subversion eingecheckt und wird von dort aus auf den Webserver geschoben, sprich deployed.

Capistrano installieren

Die Installation von Capistrano ist denkbar einfach, denn es handelt sich, wie auch schon Rails selbst, um ein Gem:

gem -y install capistrano

Damit das funktioniert, muss RubyGems installiert sein, aber dafür haben wir ja im Rahmen unserer Ruby on Rails Installation gesorgt.
Der Schalter -y sorgt wieder dafür, dass alle Dependencies, also von Capistrano benötigte Gems, gleich mitinstalliert werden.

Capistrano einrichten

Der schwierige Teil ist die korrekte Konfiguration von Capistrano.
Das hat mich zig Stunden und einige Nerven gekostet.
Zunächst bewegen wir uns in der Shell in unser Ruby-Projektverzeichnis:

cd /kunden/12345_12345/webseiten/projekt

Dort aktivieren wir dieses Projekt für Capistrano mit folgender Zeile:

capify .

Im Verzeichnis config wurde eine Datei namens deploy.rb angelegt, welche zunächst wie folgt aussieht:

set :application, "set your application name here"
set :repository, "set your repository location here"

# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
# set :deploy_to, "/var/www/#{application}"

# If you aren't using Subversion to manage your source code, specify
# your SCM below:
# set :scm, :subversion

role :app, "your app-server here"
role :web, "your web-server here"
role :db, "your db-server here", :primary => true

In dieser Datei verraten wir Capistrano ein paar Details über unser Projekt. So könnte die Datei dann fertig ausgefüllt aussehen:

set :application, "projekt"
set :repository,  "svn+ssh://ssh-12345-svn@scm.domain.de/kunden/12345_12345/svn-repository/projekt
# If you aren't deploying to /u/apps/#{application} on the target
# servers (which is the default), you can specify the actual location
# via the :deploy_to variable:
set :deploy_to, "/kunden/12345_12345/webseiten/#{application}"

# If you aren't using Subversion to manage your source code, specify
# your SCM below:
# set :scm, :subversion

# Wo liegt SVN?
set :scm_command, "/kunden/12345_12345/bin/svn/bin/svn"

default_run_options[:pty] = true

role :app, "www.domain.de"
role :web, "www.domain.de"
role :db,  "mysql5.domain.de", :primary => true

Wie man sieht, deployen wir zunächst nur auf einen einzigen Server. So, wie wir die Config hier sehen, wird sie jedoch nicht funktionieren, denn da wir es mit einem Managed Server zu tun haben, erfolgt der Zugriff auf die Datenbank in leicht abgewandelter Form. Wir müssen nun also, um Fehlermeldungen zu vermeiden, die Datenbank vom Deployment ausschließen. Dazu kommentieren wir die Zeile einfach aus:

#role :db,  "mysql5.domain.de", :primary => true

Ist die aktuellste Version des Codes bereits im SVN eingecheckt, steht einem ersten Deployment direkt aus dem Repository nichts mehr im Wege!

Wir begeben uns in das Projektverzeichnis auf dem Server (/kunden/12345_12345/webseiten/projekt/) und geben folgendes ein:

cap deploy

Nun werden wir je Rolle (also einmal web, einmal application) nach dem Kennwort gefragt; da geben wir das des SSH-Accounts für unser SVN an und das Deployment läuft.

Fertig!

Haben wir alles richtig gemacht, ist unser Ziel erreicht:
Unsere Ruby on Rails Anwendung läuft unter Mongrel auf einem ManagedServer von Domainfactory und zieht sich seinen Code mittels Capistrano aus unserem Subversion-Repository, welches wir z.B. mit Ecplise befüllen.
Happy End.

0 0 Bewertungen
Gesamtbewertung
Kommentarbenachrichtigungen
Benachrichtige mich bei
0 Kommentare
Inline Feedbacks
View all comments