Installation von Ruby on Rails auf einem 1&1 Homepage-Server =========================================================== Jochen Schalanda Version 1.4, April 2008 <> Abstract -------- Dieser Artikel ist eine Schritt-für-Schritt Anleitung zur Installation des beliebten Webframeworks http://rubyonrails.com/[Ruby on Rails] auf einem http://www.1und1.info/xml/order/ServerHomepage[Homepage-Server] (und natürlich auch Managed-Server und Exklusiv-Server) des Providers http://1und1.info/[1&1]. Dabei werden verschiedene Varianten vorgestellt, wie eine auf Ruby on Rails basierende Applikation ausgeliefert werden kann. CAUTION: Der Artikel wurde nach bestem Wissen und Gewissen geschrieben und überprüft. Ich übernehme jedoch keinerlei Haftung für Schäden, die durch Ausführung der in diesem Artikel aufgeführten Kommandos entstehen oder entstanden sind. .Lizenz ******************************************************************************** Dieser Artikel ist unter einer http://creativecommons.org/licenses/by-sa/2.0/de/[Creative Commons Lizenz] veröffentlicht. ******************************************************************************** Voraussetzungen --------------- Es wird angenommen, dass der Leser dieses Artikels zumindest Grundkenntnisse im Umgang mit Linux und der Bash besitzt. Die Kenntnis des ``Dreisprungs'' (`./configure && make && make install`) ist vorteilhaft, ebenso wie grundlegendes Verständnis von Ruby on Rails. Aus Praktikabilitätsgründen sollte jede Domain bzw. Rails Anwendung, die auf dem Server gehostet wird, in einem eigenen DocumentRoot gespeichert werden, also z. B. wird der Domain example.org das Verzeichnis `${HOME}/example.org/` zugewiesen. Der Domain rails.example.com sollte das Verzeichnis `${HOME}/rails.example.com/` zugewiesen werden. TIP: Wer es gar nicht erwarten kann, findet im Anhang eine <>. Installation zusätzlicher Software ---------------------------------- Um Ruby on Rails nutzen zu können, müssen einige Programme und Bibliotheken nachinstalliert werden. Die Programme und Bibliotheken werden im Verzeichnis `${HOME}/executable/` installiert, da dieses so http://hilfe-center.1und1.de/server/exklusiv_server/4.html[konfiguriert] werden kann, so dass der Apache httpd keinen Zugriff auf die darin enthaltenen Dateien hat. Ruby ~~~~ Ruby on Rails benötigt Ruby 1.8.2 oder höher. Im Gegensatz zur vorigen Betriebsumgebung ist auf den Homepage-Servern inzwischen Ruby 1.8.5 vorinstalliert ist, was für den Betrieb von Ruby on Rails ausreicht. RubyGems ~~~~~~~~ RubyGems ist das Gegenstück zu http://cpan.org/[CPAN] (Perl) oder http://pear.php.net/[PEAR] (PHP). Es vereinfacht die Installation einzelner Ruby Bibliotheken, Frameworks oder Programme. RubyGem 0.9.0 ist vorinstalliert, jedoch benötigt Ruby on Rails eine Version >=0.9.4. Aus diesem Grund installieren wir das aktuelle Release RubyGems 1.1.0 in unserem Homeverzeichnis. -------------------------------------------------------------------- mkdir ${HOME}/executable/src/ cd ${HOME}/executable/src/ wget http://rubyforge.org/frs/download.php/34638/rubygems-1.1.0.tgz tar -xzf rubygems-1.1.0.tgz cd rubygems-1.1.0 -------------------------------------------------------------------- TIP: In der http://docs.rubygems.org/read/chapter/3#page83[Dokumentation von RubyGems] ist die Installation als normaler Benutzer beschrieben. Im nächsten Schritt wird die eigentliche Installation von RubyGems durchgeführt. Die Gems selbst werden in dem Verzeichnis gespeichert, in dem wir zuvor schon Ruby installiert haben. ------------------------------------------------------------------------------------------------------------------------------ export GEM_HOME=${HOME}/executable/ruby/gems ruby setup.rb all --no-rdoc --no-ri --no-format-executable --prefix=${HOME}/executable/ruby --siteruby=${HOME}/executable/ruby ------------------------------------------------------------------------------------------------------------------------------ Aus Geschwindigkeitsgründen und weil diese in einer Produktivoumgebung nicht benötigt werden, verzichten wir auf die Installation der RDoc- und RI-Dokumentation. Damit das auch für alle zukünftig installierten Gems gilt, erstellen wir eine Konfigurationsdatei für `gem`. In dieser werden ebenfalls die Verzeichnisse festgelegt, in denen die Dateien der Gems gespeichert werden. -------------------------------------------------------------------- cat>${HOME}/.gemrc<>${HOME}/.profile<> installiert sein. NOTE: Informationen zu mod_fastcgi können in der http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html[offiziellen Dokumentation] gefunden werden. Die Datei `${HOME}/rails.example.org/public/.htaccess` ersetzen wir mit folgendem Inhalt: ---------------------------------------- AddHandler fastcgi-script .fcgi AddHandler cgi-script .cgi Options +FollowSymLinks +ExecCGI RewriteEngine On RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] ErrorDocument 500 /500.html ---------------------------------------- Damit die Umgebungsvariablen bei Aufruf des Dispatchers für FastCGI korrekt gesetzt werden, wird ein Wrapperskript benötigt. Die ursprüngliche Datei public/dispatch.fcgi muss dazu in public/dispatch.orig.fcgi umgenannt werden. Der Wrapper wird public/dispatch.fcgi benannt und besitzt folgenden Inhalt: -------------------------------------------------------------------------------------- #!/bin/bash export GEM_HOME="/homepages/17/d123456789/htdocs/executable/ruby/gems" export GEM_PATH=${GEM_HOME} export RUBYLIB="/homepages/17/d123456789/htdocs/executable/ruby/lib:/usr/lib/ruby/1.8" # Alternativ zu dieser Umgebungsvariablen kann die Rails-Umgebung auch in der # Datei config/environment.rb gesetzt werden. export RAILS_ENV="production" exec ./dispatch.orig.fcgi $@ -------------------------------------------------------------------------------------- Die Pfade in `${GEM_HOME}` und `${RUBYLIB}` müssen selbstverständlich angepasst werden, wobei im Gegensatz zum Inhalt der Datei `~/.profile` auf die Nutzung der Umgebungsvariablen `${HOME}` verzichtet werden muss. Beispielanwendungen ------------------- In diesem Abschnitt werden beispielhaft einige Anwendungen installiert, u .a. eine kleine Todo-Liste (Tracks) und ein Blog (Mephisto). Simples Beispiel ~~~~~~~~~~~~~~~~ Dieses Beispiel wird nichts anderes können, als eine kurze "Hello World" Nachricht anzuzeigen. ----------------------------------------------------- cd ${HOME} rails RailsTest cd RailsTest ./script/generate controller welcome hello echo "Hello World" > app/views/welcome/hello.html.erb ----------------------------------------------------- Damit sich Ruby on Rails bzw. ActiveRecord auch ohne gültige Datenbankzugangsdaten zufrieden gibt, muss in der Datei `${HOME}/RailsTest/config/environment.rb` folgende Zeile auskommentiert werden: ------------------------------------------------------------------------- config.frameworks -= [ :active_record, :active_resource, :action_mailer ] ------------------------------------------------------------------------- Wir binden dieses Beispiel über die CGI-Schnittstelle ein, um das Vorgehen bei dieser Konfiguration zu verdeutlichen. Die `${HOME}/RailsTest/public/.htaccess` muss mit folgendem Inhalt gefüllt werden: -------------------------------------------------------------------------------------------- AddHandler cgi-script .cgi Options +FollowSymLinks +ExecCGI SetEnv GEM_HOME /kunden/homepages/17/d123456789/htdocs/executable/ruby/gems SetEnv GEM_PATH /kunden/homepages/17/d123456789/htdocs/executable/ruby/gems SetEnv RUBYLIB /kunden/homepages/17/d123456789/htdocs/executable/ruby/lib:/usr/lib/ruby/1.8 RewriteEngine On RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ dispatch.cgi [QSA,L] ErrorDocument 500 /500.html -------------------------------------------------------------------------------------------- Im Prinzip müssen alle Umgebungsvariablen (außer `${PATH}`), die auch in der `${HOME}/.profile` stehen, in der .htaccess Datei angegeben werden. Bei der Einbindung via FastCGI erfolgt dies über das Wrapperskript. Die Einrichtung des Beispiels ist damit auch schon beendet und bei Aufruf von `http://rails.example.org/welcome/hello` sollte uns ein schönes "Hello World" begrüßen. Tracks ~~~~~~ Das praktische http://www.rousette.org.uk/projects/[Tracks] ist so etwas wie eine aufgemotzte To-Do Liste, die einen bei der http://de.wikipedia.org/wiki/Getting_Things_Done[GTD]-Methode unterstützt. --------------------------------------------------------------- cd ${HOME} wget http://www.rousette.org.uk/projects/files/tracks-1.5.zip unzip tracks-1.5.zip mv tracks-1.5 tracks.example.org --------------------------------------------------------------- Im https://login.1und1.de/[Control Center] des Homepage-Servers legen wir eine Subdomain namens tracks.example.org an, die auf das Verzeichnis /tracks.example.org/public/ verweist. NOTE: Die http://hilfe-center.1und1.de/hosting/domains/verwaltung/4.html[Einrichtung von Subdomains] und die http://hilfe-center.1und1.de/hosting/domains/verwaltung/1.html[Zuweisung eines DocumentRoots] werden in der FAQ von 1&1 beschrieben. Für den Betrieb von Tracks ist eine MySQL-Datenbank notwendig, die über das https://login.1und1.de/[Control Center] erstellt werden muss. Anschließend werden die Zugangsdaten in die Datei `${HOME}/tracks.example.org/config/database.yml` eingetragen: ------------------------------------------------------- cat>${HOME}/tracks.example.org/config/database.yml<${HOME}/mephisto.example.org/config/database.yml<${HOME}/redmine.example.org/config/database.yml<>${HOME}/.profile<${HOME}/.gemrc<${HOME}/rails.example.org/public/.htaccess<${HOME}/rails.example.org/public/dispatch.fcgi<