Ruby on Rails ist die Trendprogrammiersprache der web 2.0-Bewegung. Doch das Entwicklungsframework Rails ist bei deutschen Hostern kaum zu finden, weshalb viele sich mit selbstinstallierten Rootservern oder ausländischen (vornehmlich U.S.A.) Anbietern begnügen.
Doch möchte nicht ein jeder, alleine aus datenschutzrechtlichen Gründen, seine Daten in den U.S.A. liegen haben.
Ich habe mich jetzt mal hingesetzt und bei dem Müncher Traditionshoster Domainfactory einen ManagedServer mit Ruby on Rails und Mongrel ausgestattet.
Damit man auch bequem und effizient weiter an seiner Webanwendung schrauben kann, habe ich zusätzlich einen Subversion-Daemon aufgesetzt, der mit Eclipse befüttert wird und von dem aus Capistrano auf die Liveumgebung deployen kann.
Du wolltest das auch schon immer mal probieren?
Kein Problem! Ich habe alles fein säuberlich aufgeschrieben, hier das Rezept:
Wir wollen unsere neue Ruby on Rails-Webanwendung auf einem Managed Server von Domainfactory zum Laufen bekommen.
Damit wir eine lauffähige RoR-Installation bekommen durchlaufen wir folgende Schritte:
- Ruby installieren (v.1.8.4)
- RubyGems installieren (v.0.9.2)
- Rails als Gem installieren
- Mongrel installieren
Voraussetzungen
Bevor wir loslegen können, müssen wir für ein paar Dinge Sorge tragen. Folgendes sollte bereitstehen:
- SSH-Zugang
- FTP-Zugang
- Wir sind mit bspw. Putty eingeloggt und befinden uns im FTP-Root.
In meinem Fall ist das: /kunden/12345_12345/
Ruby Installation
Sollte Ruby nicht bereits installiert sein oder in einer Version < 1.8.2 vorliegen, müssen wir Ruby installieren.
Dazu geben wir in der Konsole folgendes ein:
wget ftp://ftp.ruby-lang.org/pub/ruby/ruby-1.8.4.tar.gz
tar -xjf ruby-1.8.4.tar.gz
cd ruby-1.8.4
Damit haben wir Ruby auf den Server übertragen, entpackt und befinden uns im entpackten Verzeichnis.
Bevor wir Ruby installieren können, müssen wir den Installationspfad festlegen, da wir nicht die Rechte haben, die bestehende Installation zu überschreiben:
.configure --prefix=/kunden/12345_12345
make clean
make
make install
Nun legt der Server fleißig los und installiert Ruby.
Mit ruby –version können wir überprüfen, ob die Installation geklappt hat.
Sollte trotzdem noch die alte Rubyversion angezeigt werden, liegt das daran, dass die alte Version in der $PATH-Variablen vor der neuen kommt und der Server daher immernoch diese Version verwendet.
Erst, wenn die erstgefundene Version nicht mehr verfügbar ist, würde dann unsere genommen werden.
Zu diesem Zweck passen wir den Umgebungspfad an:
export PATH=/kunden/12345_12345/bin:/kunden/12345_12345/lib:$PATH
Ein erneutes ruby –version sollte nun die neue Version angeben.
Achtung: Die angepasste Umgebungsvariable ist nur temporär und muss noch gespeichert werden – das machen wir später.
RubyGems installieren
Mit folgenden Zeilen laden und installieren wir uns RubyGems, ein Verwaltungstool mit dem sich Pakete wie Rails oder Mongrel leicht installieren lassen:
wget rubyforge.iasi.roedu.net/wp-content/uploads/sites/10/rubygems/rubygems-0.9.2.tgz
tar -xzf rubygems-0.9.2.tgz
cd rubygems-0.9.2
ruby setup.rb
Und das war’s.
Rails installieren
Mit dem eben installierten RubyGems können wir das Gem Rails hinzufügen:
gem install rails -y
Wie, das ist alles?
Ja, das ist alles!
RubyGems zieht sich automatisch das aktuelle Rails-Release aus dem Repository und installiert es. Die Option -y bedeutet, dass von diesem Release abhängige Gems ebenfalls – und völlig automatisch – mitinstalliert werden.
Sollte Rails sich wider erwarten verweigern installiert zu werden, hilft es meist alle Gems zu updaten:
gem update
Auch wenn wir Gems: [] updated ausgegeben bekommen, hilft es.
Ein selbstbewusstes rails –version gibt uns jetzt die aktuelle Rails-Version aus. Bei mir ist das aktuell die Version 1.2.5.
Mongrel installieren
Um Mongrel als Server für Ruby on Rails einsetzen zu können (sowie Apache die von PHP erzeugten Files ausliefert), bedarf es einiger Gems mehr!
Hier die Zeile zur Installation mehrerer Gems auf einmal:
gem install daemons gem_plugin mongrel mongrel_cluster –y
Der Parameter -y sorgt wieder dafür, das eventuell fehlende Gems (die zum Betrieb der anderen erforderlich sind) gleich mitinstalliert werden.
Mongrel konfigurieren
Da wir in den voreingestellten Pfaden leider keine Schreibrechte haben, müssen wir die Konfiguration abändern.
Dazu erstellen wir in unserem Config-Verzeichnis (/kunden/12345_12345/config/) eine neue Datei namens mongrel_cluster.yml mit folgendem Inhalt:
--- docroot: /kunden/12345_12345/webseiten/projekt/public cwd: /kunden/12345_12345/webseiten/projekt log_file: /kunden/12345_12345/mongrel.log port: 3000 environment: production pid_file: /kunden/12345_12345/config/mongrel.pid num_processors: 6
Nun weiß Mongrel, wer er ist, und welches Verzeichnis er zugänglich machen soll.
Wir können Mongrel mittels folgendem Befehl starten:
mongrel_rails cluster::start --config /kunden/12345_12345/config/mongrel_cluster.yml
Wer jetzt schon voll Freude seine Webseite im Browser aufgerufen hat wird enttäuscht sein, denn es hat sich nichts verändert.
Wieso funktioniert das nicht?
Es funktioniert.
Nur eben nicht direkt vor unserer Nase, sondern ein Stück daneben.
Mongrel läuft nun auf Port 3000. Wenn wir unsere Webseite im Browser öffnen, benutzen wir aber den Port 80. Dieser Port gehört dem Apache-Webserver.
Und dem Indianer müssen wir noch sagen, dass er die Finger ruhig halten soll.
Dazu erstellen wir im Web-Root (/kunden/12345_12345/webseiten) eine .htaccess-Datei mit folgendem Inhalt:
RewriteEngine On RewriteRule ^(.*)$ 127.0.0.1/$1 [P,QSA,L]
Jetzt weiß der Apache, dass er alles was reinkommt ((.*)) an den Port 3000 des gleichen Rechners weiterleiten soll (127.0.0.1:3000).
Wenn wir in unserem Browser jetzt die Webseite aufrufen, sollten wir unsere wunderschöne Ruby-Anwendung zu Gesichte bekommen. Damit das am nächsten Tag auch noch so ist, müssen wir die $PATH-Variable retten:
$PATH retten
Um unsere selbst konfigurierte $PATH-Variable über die aktuelle Session hinweg zu retten, geben wir folgenden Code im FTP-Root ein:
cat>>${HOME}/.profile<<EOF<br />export PATH="${HOME}/executable/ruby/bin:${PATH}"
EOF
Diese Datei wird fortan bei jedem SSH-Login automatisch eingelesen.
Ende Gelände
Das war es nun eigentlich schon. Im Folgenden werden wir noch Tools für die Entwicklung unserer tollen Anwendung installieren (Subversion und Capistrano) und ansonsten wünsche ich viel Spaß beim partizipieren am web 2.0.