Verwendung von Ruby on Rails mit Apache2 auf Debian Etch

Version 1.0
Author: Falko Timme


Diese Anleitung veranschaulicht, wie man Ruby on Rails (RoR) installiert und es in Apache2 auf einem Debian Etch System (inklusive eines kurzen Abschnittes am Ende, der aufzeigt, wie man RoR auf einer Webseite, die mit ISPConfig erstellt wurde, verwendet) integriert. Ruby on Rails ist ein Web Application Framework, das unter Webprogrammierern ziemlich schnell an Popularität gewonnen hat. Es zielt darauf ab, die Schnelligkeit und Leichtigkeit zu erhöhen, mit der Datenbank-basierte Webseiten erstellt werden können. Anwendungen, die das RoR Framework verwenden, werden unter Verwendung des Model-View-Controller Design Patterns entwickelt.

Diese Anleitung ist ohne jegliche Gewähr! Ich möchte darauf hinweisen, dass dies nicht der einzige Weg ist, ein solches System einzurichten. Es gibt viele Möglichkeiten dieses Ziel zu erreichen - dies ist der Weg, den ich gewählt habe. Ich übernehme keine Garantie, dass dies auch bei Dir funktioniert!

1 Vorbemerkung

In dieser Anleitung verwende ich den Hostnamen testapplication.example.com für den virtuellen Host, auf dem Ruby on Rails läuft.

2 Installation von Ruby und Rails

Um Ruby und Ruby on Rails zu installieren, führen wir einfch Folgendes aus

apt-get install ruby libzlib-ruby rdoc irb rubygems rails eruby


3 Installation von Apache2 und mod-fcgid

Ruby on Rails mittels mod-fcgid in Apache2 ingegriert werden. Dazu installieren wir folgende Pakete:

apt-get install apache2 libapache2-mod-fcgid libfcgi-ruby1.8

Danach aktivieren wir einige Apache Module:

a2enmod ssl
a2enmod rewrite
a2enmod suexec
a2enmod include

und laden Apache neu:

/etc/init.d/apache2 force-reload


4 Installation von MySQL und der Ruby MySQL Bindings

Sehr wahrscheinlich wirst Du (oder Deine Benutzer) gerne Datenbank-basierte Ruby on Rails Anwendungen erstellen, daher installieren wir jetzt den MySQL Server und die Ruby MySQL Bindings:

apt-get install libmysql-ruby mysql-server

Nun solltest Du ein Root-Passwort für MySQL anlegen:

mysqladmin -u root password yourrootsqlpassword

Wenn MySQL nicht nur auf 127.0.0.1 hört, sondern auch auf anderen Adressen (z.B. server1.example.com), solltest Du auch für diese Adressen ein Root-Passwort anlegen:

mysqladmin -h server1.example.com -u root password yourrootsqlpassword


5 Unsere Ruby On Rails Umgebung erstellen

Nun können wir ein Verzeichnis erstellen, in dem wir unsere zukünftige RoR Anwendung entwickeln möchten. Ich möchte sie in /var/rails entwickeln, also erstelle ich dieses Verzeichnis jetzt:

mkdir /var/rails

Apache2 sollte auf dieses Verzeichnis einen Lese-/Schreibzugriff haben, also machen wir den Apache Benutzer (www-data auf Debian) und die Apache Gruppe (again www-data) zum Besitzer und der Gruppe dieses Verzeichnisses:

chown -R www-data:www-data /var/rails

Nun können wir unsere erste RoR Anwendung erstellen, die wir testapplication nennen werden. Wir werden testapplication unter dem Benutzer www-data erstellen, sodass Apache einen Lese-/Schreibzugriff hat:

cd /var/rails
su -m www-data

Da wir nun als www-data angemeldet sind, führen wir Folgendes aus

rails testapplication

Damit wird ein Verzeichnis mit der Bezeichnung testapplication innerhalb von /var/rails erstellt, das alle Verzeichnisse und Dateien beinhaltet, die wir zur Entwicklung unserer RoR Anwendung benötigen.

Tippe als Nächstes

exit

um wieder Root-Benutzer zu werden.

6 Bearbeiten unserer Anwendungs .htaccess Datei

Der Web-Ordner von testapplication ist /var/rails/testapplication/public. Er beinhaltet eine .htaccess Datei, die wir bearbeiten müssen, damit Apache2 RoR Anwendungen mit mod-fcgid ausführen kann.

vi /var/rails/testapplication/public/.htaccess

Kommentiere die AddHandler fastcgi-script .fcgi und AddHandler cgi-script .cgi Zeilen aus und füge die Zeile AddHandler fcgid-script .fcgi hinzu. Kommentiere außerdem die Zeile RewriteRule ^(.*)$ dispatch.cgi [QSA,L] aus und füge die Zeile RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] (achte darauf, dass es nun dispatch.fcgi und nicht dispatch.cgi ist) hinzu. Danach sollte die Datei wie folgt aussehen:
# General Apache options
#AddHandler fastcgi-script .fcgi #AddHandler cgi-script .cgi AddHandler fcgid-script .fcgi Options +FollowSymLinks +ExecCGI # If you don't want Rails to look in certain directories, # use the following rewrite rules so that Apache won't rewrite certain requests # # Example: # RewriteCond %{REQUEST_URI} ^/notrails.* # RewriteRule .* - [L] # Redirect all requests not available on the filesystem to Rails # By default the cgi dispatcher is used which is very slow # # For better performance replace the dispatcher with the fastcgi one # # Example: # RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] RewriteEngine On # If your Rails application is accessed via an Alias directive, # then you MUST also set the RewriteBase in this htaccess file. # # Example: # Alias /myrailsapp /path/to/myrailsapp/public # RewriteBase /myrailsapp RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f #RewriteRule ^(.*)$ dispatch.cgi [QSA,L] RewriteRule ^(.*)$ dispatch.fcgi [QSA,L] # In case Rails experiences terminal errors # Instead of displaying this message you can supply a file here which will be rendered instead # # Example: # ErrorDocument 500 /500.html ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"

7 Einen virtuellen Host für unsere RoR Anwendung erstellen

(Falls Du ISPConfig verwendest, mach bitte mit Kapitel 8 weiter!)

Nun ist es an der Zeit einen Apache vhost für unsere Anwendung zu erstellen. Ich werde den Hostnamen testapplication.example.com verwenden, damit unsere Anwendung unter http://testapplication.example.com (davon ausgehend, dass testapplication.example.com auf die richtige IP Adresse zeigt) erreicht werden kann.

Der einfachste Weg einen solchen vhost zu erstellen, ist, den vorhandenen Standard-vhost in /etc/apache2/sites-available/default zu ersetzen (davon ausgehend, dass dieser Standard-vhost nicht benötigt wird!):

cp /etc/apache2/sites-available/default /etc/apache2/sites-available/default_old
cat /dev/null > /etc/apache2/sites-available/default
vi /etc/apache2/sites-available/default

<Virtualhost *:80>
ServerName testapplication.example.com DocumentRoot /var/rails/testapplication/public/ <Directory /var/rails/testapplication/public> Options ExecCGI FollowSymLinks AllowOverride all Order allow,deny Allow from all </Directory> </Virtualhost>
Natürlich kannst Du auch, anstatt den Standard-vhost zu ersetzen, einfach Deinen testapplication.example.com vhost am Ende von /etc/apache2/sites-available/default hinzufügen, damit Du den Standard-vhost behältst.

Nun starten wir Apache neu:

/etc/init.d/apache2 restart

Als Nächstes öffnen wir http://testapplication.example.com in einem Browser. Wir müssten die Standard-RoR Seite sehen:


Das war's! Nun können wir anfangen, unsere RoR Anwendung im /var/rails/testapplication Verzeichnis zu entwickeln.

8 RoR und ISPConfig

(Falls Du ISPConfig nicht verwendest, überspringe dieses Kapitel!)

In diesem Kapitel gehe ich davon aus, dass Du eine Webseite erstellt hast namens testapplication.example.com mit dem Dokumenten-Root /var/www/web1/web in ISPConfig und dass Deine RoR testapplication immer noch in /var/rails/testapplication ist.

Um unsere RoR testapplication im testapplication.example.com vhost, den wir in ISPConfig erstellt haben, verfügbar zu machen, führen wir Folgendes aus:

Zuerst fügen wir folgende Zeilen in das Apache Directives Feld der testapplication.example.com Webseite in ISPConfig ein:
<Directory /var/www/web1/web>
Options +ExecCGI +FollowSymLinks AllowOverride all </Directory>
Dann benennen wir /var/rails/testapplication/public um in /var/rails/testapplication/web, kopieren die Inhalte von /var/rails/testapplication nach /var/www/web1 und machen den Apache Benutzer zum Besitzer von /var/www/web1/web:

cd /var/rails/testapplication
mv public web
cp -pfr * /var/www/web1
chown www-data:web1 /var/www/web1/web

Das war's. Die RoR Anwendung sollte nun im testapplication.example.com vhost, den wir in ISPConfig erstellt haben, funktionieren.

9 Links

1 Kommentar(e)

Zum Posten von Kommentaren bitte

Kommentare

Von: tini

Ich hatte mal versucht, das Apache-Modul passenger (http://railsbuch.de/2008/4/13/passenger) auf meiner ISPConfig-Box zu installieren und dann Tracks (http://www.rousette.org.uk/projects/) in einer unter ISPConfig erstellten Seite zum Laufen zu bringen. Leider erfolglos, resp. mit lauter Application-Errors. Hab das dann aus Zeitmangel nicht weiter verfolgt. Ein Tutorial dazu wäre aber sehr hilfrei.