Rheinwerk Computing < openbook > Rheinwerk Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Geleitwort des Fachgutachters
Einleitung
1 Einführung
2 Installation
3 Erste Schritte
4 Einführung in Ruby
5 Eine einfache Bookmarkverwaltung
6 Test-Driven Development
7 Rails-Projekte erstellen
8 Templatesystem mit ActionView
9 Steuerzentrale mit ActionController
10 Datenbankzugriff mit ActiveRecord
11 E-Mails verwalten mit ActionMailer
12 Nützliche Helfer mit ActiveSupport
13 Ajax on Rails
14 RESTful Rails und Webservices
15 Rails mit Plug-ins erweitern
16 Performancesteigerung
17 Sicherheit
18 Veröffentlichen einer Rails-Applikation auf einem Server
Ihre Meinung?

Spacer
 <<   zurück
Ruby on Rails 2 von Hussein Morsy, Tanja Otto
Das Entwickler-Handbuch
Buch: Ruby on Rails 2

Ruby on Rails 2
geb., mit DVD
699 S., 39,90 Euro
Rheinwerk Computing
ISBN 978-3-89842-779-1
Online bestellenPrint-Version jetzt bestellen
* versandkostenfrei in (D) und (A)
Pfeil 18 Veröffentlichen einer Rails-Applikation auf einem Server
  Pfeil 18.1 Wahl des Providers
  Pfeil 18.2 Einrichten des Servers
  Pfeil 18.3 Konfigurieren der Rails-Applikation auf dem Server
  Pfeil 18.4 Deployment mit Capistrano


Rheinwerk Computing - Zum Seitenanfang

18.2 Einrichten des Servers  Zur nächsten ÜberschriftZur vorigen Überschrift


Rheinwerk Computing - Zum Seitenanfang

Wahl der Server-Software  Zur nächsten ÜberschriftZur vorigen Überschrift

Die Schwierigkeit liegt u. a. an den vielen Möglichkeiten, den Server zu installieren. Standardlösungen, wie z. B. der Einsatz von Apache mit FastCGI, haben sich nicht als praxistauglich erwiesen.

Sie müssen nicht nur entscheiden, welches Betriebssystem zum Einsatz kommen soll und welche Webserver-Software installiert werden soll, sondern auch, mit welcher Schnittstelle die Rails-Applikation an den Webserver angebunden wird.

Load Balancing

Um der Belastung von vielen Anfragen standhalten zu können, muss meist auch ein sogenanntes Load Balancing konfiguriert werden, das die Anfragen an verschiedene Instanzen Ihrer Rails-Applikation verteilt, die entweder auf einem oder auf verschiedenen Servern installiert sind. Die folgende Auflistung zeigt die möglichen Varianten:

  • Server-Betriebssystem:
    Linux (z. B. Debian, Ubuntu, Red Hat, Fedora, SUSE, ...), Unix (freeBSD, Solaris, ...), Windows, OS X Server und weitere
  • Webserver:
    Apache, Lighttpd, Nginx
  • Schnittstelle zwischen Webserver und Applikation:
    CGI, FastCGI, Mongrel
  • Datenbanksystem:
    MySQL, PostgreSQL, Oracle
  • Load Balancing:
    Pound, Apache-Modul mod_proxy_balancer

Jede mögliche Kombination zu zeigen, würde den Rahmen dieses Buches sprengen. Deshalb werden wir eine aus unserer Erfahrung Best-Practice-Lösung zeigen, die auch von vielen anderen Entwicklern so eingesetzt wird:

  • Server-Betriebssystem:
    Ubuntu Linux oder Debian Linux
  • Webserver:
    Apache 2.2
  • Schnittstelle zwischen Webserver und Applikation:
    Mongrel
  • Datenbanksystem:
    MySQL
  • Load Balancing:
    Apache-Modul mod_proxy_balancer

Nginx

Der russische Webserver Nginx wird aufgrund seiner Geschwindigkeit und seines schlanken Aufbaus unter Administratoren und Rails-Entwicklern immer beliebter. Jedoch gibt es noch keine ausreichende Dokumentation. Deshalb werden wir den Apache-Webserver einsetzen, der aufgrund seiner großen Verbreitung sehr gut dokumentiert ist und für den zahlreiche Bücher auf dem deutschen Markt verfügbar sind (z. B. »Apache 2« von Sascha Kersken im Verlag Galileo Press).

Ubuntu 7.10

Da wir mindestens Apache Version 2.2.x und Ruby 1.8.6 benötigen, ist es empfehlenswert, mindestens Ubuntu 7.10 einzusetzen. Die hier beschriebene Anleitung wurde auf Ubuntu 7.10 durchgeführt.

Der Grund, warum wir Ubuntu gegenüber Debian den Vorzug geben, liegt darin, dass Ubuntu aktuellere Pakete anbietet. Dies ist insbesondere für Rails wichtig.

Virtualisierung
Auf dedizierten Servern ist es sehr empfehlenswert, eine Virtualisierungssoftware, wie z. B. XEN, VMWare, Virtual Linux oder OpenVZ einzusetzen. Hiermit ist es möglich, mehrere virtuelle Server auf einer Hardware zu installieren. Virtuelle Server eignen sich auch zum Üben. Wenn etwas schiefgeht, werden die anderen virtuellen Server nicht betroffen. XEN und VMware sind bei den Server-Admnistratoren sehr beliebt. Wenn Sie jedoch nur Linux-basierte virtuelle Server benötigen, empfehlen wir die Verwendung von OpenVZ (siehe http://openvz.org/ ).

Root-Zugang

Wir gehen im Folgenden davon aus, dass Ihr Provider Ihnen Ubuntu installiert und Ihnen einen Root-User-Zugang zur Verfügung gestellt hat.

Loggen sich zunächst mit Ihrem Root-User auf den Server ein. Gegebenenfalls können Sie mit dem Befehl sudo -s einen Root-Zugang erhalten.


Rheinwerk Computing - Zum Seitenanfang

Deploy-User anlegen  Zur nächsten ÜberschriftZur vorigen Überschrift

Wir werden einen User mit dem Namen deploy anlegen. Unter diesem Usernamen werden die Übertragungen auf den Server ausgeführt. Sie können auch einen beliebigen anderen Usernamen verwenden.

Listing  User deploy anlegen

adduser deploy

Adding user `deploy' ...
Adding new group `deploy' (1000) ...
Adding new user `deploy' (1000) with group `deploy' ...
Creating home directory `/home/deploy' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for deploy
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [y/N] y

Rheinwerk Computing - Zum Seitenanfang

Paketmanagement konfigurieren  Zur nächsten ÜberschriftZur vorigen Überschrift

sources.list

Als Nächstes aktualisieren wir das Paketmanagement, das für die Installation der Server-Software zuständig ist. In /etc/apt/sources.list wird festgelegt, von welchen Quellen (Repositories) die Pakete geladen werden. Um sicherzustellen, dass alle Pakete, die wir in diesem Kapitel installieren, auch verfügbar sind, ersetzen wir den Inhalt der Datei /etc/apt/sources.list durch folgenden Inhalt:

Listing  /etc/apt/sources.list

# Ubuntu supported packages
# GPG key: 437D05B5
deb http://de.archive.ubuntu.com/ubuntu gutsy main restricted
deb http://de.archive.ubuntu.com/ubuntu gutsy-updates main restricted
deb http://security.ubuntu.com/ubuntu gutsy-security main restricted

deb-src http://de.archive.ubuntu.com/ubuntu gutsy main restricted
deb-src http://de.archive.ubuntu.com/ubuntu gutsy-updates main restricted
deb-src http://security.ubuntu.com/ubuntu gutsy-security main restricted

# Ubuntu community supported packages
# GPG key: 437D05B5
deb http://de.archive.ubuntu.com/ubuntu gutsy universe multiverse
deb http://de.archive.ubuntu.com/ubuntu gutsy-updates universe multiverse
deb http://security.ubuntu.com/ubuntu gutsy-security universe multiverse

deb-src http://de.archive.ubuntu.com/ubuntu gutsy universe multiverse
deb-src http://de.archive.ubuntu.com/ubuntu gutsy-updates universe multiverse
deb-src http://security.ubuntu.com/ubuntu gutsy-security universe multiverse

Beachten Sie, dass dies nur für Ubuntu 7.10 (alias Gutsy) korrekt ist. Anders als hier abgedruckt, müssen Sie die Quellenangaben immer in eine Zeile schreiben, so dass jede Zeile mit deb * beginnt. Wir konnten das aus Platzgründen hier leider nicht realisieren. Weitere Informationen zu sources.list finden Sie unter http://railsbuch.de/urls/12 .

Paketsystem aktualisieren

Nachdem wir die Quellen geändert haben, muss das Paketsystem entsprechend aktualisiert werden:

Listing  Server updaten

aptitude update
aptitude upgrade

Compiler und Tools

Für einige Erweiterungen (z. B. Mongrel) werden Compiler (z. B. GCC) und passende Tools (make) benötigt, die wir einfach wie folgt installieren können:

Listing  Compiler und Tools installieren

aptitude install build-essential wget

Mit dem Tool wget können wir u. a. Dateien von anderen Servern downloaden.

Pakete mit aptitude statt mit apt-get installieren
Das Paketverwaltuns-Tool aptitude ist vor dem älteren Tool apt-get zu bevorzugen, da u.a. Konflikte besser gelöst werden.


Rheinwerk Computing - Zum Seitenanfang

Installation von Subversion und Erstellung eines Repository  Zur nächsten ÜberschriftZur vorigen Überschrift

Installation

Im Folgenden werden Sie den einfachsten Weg kennenlernen, um Subversion auf dem Server zu installieren und ein Repository für den User deploy zu erstellen. Es wird hier nicht gezeigt, wie man die Subversion-Repositories mittels Apache, SSL und Authentifizierung für mehrere Benutzer konfiguriert.

Die Installation des Subversion-Servers kann leicht durch die Installation des gleichnamigen Pakets erfolgen. Die Subversion-Repositories legen wir im Verzeichnis /srv/svn an:

Listing  Subversion-Paket installieren

aptitude install subversion
mkdir /srv/svn

Erstellung eines Repository

Die Erstellung eines Repository erfolgt mit dem Befehl svnadmin create <name-des-repository> . Anschließend setzen wir die Rechte auf den User deploy:

Listing  Anlegen eines Repository für das Beispielprojekt Railsair

svnadmin create /srv/svn/railsair
chown -R deploy:deploy /srv/svn/railsair

svn import

Das Repository ist nun eingerichtet und kann auf dem Client mit dem Befehl svn import importiert werden (siehe Abschnitt 7.13).

Der Zugriff auf das Repository erfolgt bei unser Konfiguration über die URL svn+ssh://domain/srv/svn/railsair mit dem User deploy.


Rheinwerk Computing - Zum Seitenanfang

Installation von Ruby und Co.  Zur nächsten ÜberschriftZur vorigen Überschrift

Bevor wir Ruby on Rails installieren, müssen vorher noch der Ruby-Interpreter und der Paketmanager RubyGems installiert werden. Außerdem werden weitere erforderliche Pakete installiert:

Listing  Installation von Ruby

aptitude install ruby1.8 ruby1.8-dev ruby rdoc irb irb1.8 \
libopenssl-ruby libzlib-ruby zlib1g

Neueste Version von RubyGems

Da wir unbedingt die neueste Version von RubyGems benötigen, werden wir diesmal die Installation manuell vornehmen:

Listing  Manuelle Installation von RubyGems

wget \
http://rubyforge.org/frs/download.php/29548/rubygems-1.0.1.tgz
tar xzvf rubygems-1.0.1.tgz
cd rubygems-1.0.1
ruby setup.rb
gem update --system

Falls der letzte Befehl scheitert, muss ein symbolischer Link erstellt werden:

sudo ln -s /usr/bin/gem1.8 /usr/bin/gem

Rheinwerk Computing - Zum Seitenanfang

MySQL  Zur nächsten ÜberschriftZur vorigen Überschrift

Installation

MySQL5

Als Nächstes installieren wir den Datenbankserver MySQL 5. Während der Installation werden Sie aufgefordert, ein Passwort für den Root-User des Datenbankservers festzulegen.

Listing  Installation von MySQL 5

aptitude install mysql-server-5.0 libmysqlclient15-dev

Das Paket libmysqlclient15-dev ist u. a. für den Zugriff von Ruby auf das Datenbanksystem notwendig.

Anschließend können Sie mit mysql -uroot -p überprüfen, ob Sie sich mit dem eben festgelegten Passwort anmelden können.

Ruby-MySQL- Binding

Damit Ruby auf MySQL zugreifen kann, installieren wir ein sogenanntes Ruby-MySQL-Binding:

gem install mysql

Rheinwerk Computing - Zum Seitenanfang

Datenbank für das Beispielprojekt anlegen  Zur nächsten ÜberschriftZur vorigen Überschrift

Für unser Beispielprojekt legen wir eine Datenbank an und vergeben ein Passwort für den User railsair . Es ist empfehlenswert, für jede Datenbank einen eigenen User mit Passwort anzulegen. Wir verwenden als Usernamen den Projektnamen.

Listing  Datenbank und Rechte für User railsair anlegen

#mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.
...
mysql> create database railsair;
Query OK, 1 row affected (0.02 sec)

mysql> grant all on railsair.* to railsair@localhost identified
by 'geheim';
Query OK, 0 rows affected (0.00 sec)

mysql> quit
Bye

Rheinwerk Computing - Zum Seitenanfang

Installation von SQLite3  Zur nächsten ÜberschriftZur vorigen Überschrift

Keine Server-Software erforderlich

Für kleinere Applikationen kann auch SQLite3 verwendet werden. Im Gegensatz zu MySQL wird für SQLite3 keine Server-Software installiert, sondern lediglich eine Programmierbibliothek für den Zugriff auf die Datenbankdateien:

Listing  Installation SQLite3

aptitude install sqlite3 libsqlite3-dev
gem install sqlite3-ruby

Rheinwerk Computing - Zum Seitenanfang

Installation von Rails  Zur nächsten ÜberschriftZur vorigen Überschrift

Die Installation von Rails erfolgt über den gem -Befehl:

Listing  Installation von Rails

gem install rails

Weitere RubyGem-Pakete können auch auf diese Weise installiert werden.

Installation von einer älteren Rails-Version
Mit dem Befehl gem install -v 1.2.6 rails können Sie die Rails-Version 1.2.6 installieren, damit auf Ihrem Server auch »ältere« Rails-Applikationen lauffähig sind.


Rheinwerk Computing - Zum Seitenanfang

Installation und Konfiguration von Mongrel  Zur nächsten ÜberschriftZur vorigen Überschrift

HTTP-Server

Mongrel ist ein HTTP-Server, der speziell für das Hosten von Ruby on Rails und anderen Ruby-basierten Web-Applikationen entwickelt wurde. Somit kann auf den Einsatz vom langsamen CGI und dem auf dem Apache-Server fehleranfälligen FastCGI verzichtet werden.

Mehrere Mongrel-Server

Ein Mongrel-Server bzw. -Hintergrundprozess kann nur eine Rails-Applikation ausführen. Da Rails aber nur einen Benutzer gleichzeitig bedienen kann, müssen wir mehrere Mongrel-Server gleichzeitig auf dem Server (oder mehreren Servern) ausführen. Jeder Mongrel-Server wird unter einem anderen Port ausgeführt. Für die Verwaltung von mehreren Mongrel-Servern wird das RubyGem-Paket Mongrel Cluster eingesetzt.

Die Installation von Mongrel Cluster erfolgt wie folgt:

Listing  Installation von Mongrel Cluster

gem install mongrel_cluster
...
Successfully installed gem_plugin-0.2.3
Successfully installed daemons-1.0.9
Successfully installed fastthread-1.0.1
Successfully installed cgi_multipart_eof_fix-2.5.0
Successfully installed mongrel-1.1.3
Successfully installed mongrel_cluster-1.0.5
...

Wie man an der Ausgabe erkennt, werden automatisch die abhängigen Pakete mitinstalliert.

Weiterer Webserver erforderlich

Obwohl Mongrel ein HTTP-Server ist, kommen wir nicht ohne einen weiteren Webserver aus. Dies hat vor allem folgende Gründe:

  • zu langsam zum Ausliefern von statischen Dateien
    Eine Rails-Applikation verwendet eine Reihe von statischen Dateien wie Bilder, CSS-, JavaScript-Dateien und weitere. Apache und andere Webserver können diese Dateien viel effizienter ausliefern.
  • geringer Funktionsumfang
    Da Mongrel ein spezialisierter HTTP-Server ist, besitzt er z. B. keine Funktion, um Weiterleitungen (Redirects) usw. zu konfigurieren.

Rheinwerk Computing - Zum Seitenanfang

Apache-Webserver  Zur nächsten ÜberschriftZur vorigen Überschrift

Wir verwenden den Apache-Webserver für unsere Rails-Applikation, um genau zwei Aufgaben zu erfüllen:

  • Alle Anfragen von statischen Dateien sollen direkt vom Apache-Server ausgeliefert werden. Dazu gehören nicht nur Bilder und CSS-Dateien, sondern auch zwischengespeicherte HTML-Dateien, die durch den Caching-Mechanismus (falls aktiviert) von Rails generiert werden; siehe Kapitel 16. Apache führt diese Aufgabe schneller als Mongrel aus.
  • Alle anderen Anfragen werden an einen Mongrel-Server delegiert. Da in der Regel mehrere Mongrel-Server gleichzeitig laufen, um mehrere Benutzer gleichzeitig zu bedienen, muss der Apache-Server die Anfragen entsprechend sinnvoll auf die Mongrel-Server verteilen. Dazu wird das Modul mod_proxy_balancer eingesetzt, das in Apache 2.2 integriert ist.

Abbildung  Apache- und Mongrel-Server

Installation von Apache 2.2.x

Für die Installation des Apache-Webservers reicht folgender Befehl:

Listing  Installation von Apache

aptitude install apache2

Rheinwerk Computing - Zum Seitenanfang

Module aktivieren  topZur vorigen Überschrift

Damit das Verteilen (Proxy) und das Weiterleiten (Redirect) funktionieren, müssen noch Module für Apache aktiviert werden:

Listing  Module aktivieren

a2enmod rewrite
a2enmod proxy
a2enmod proxy_http
a2enmod proxy_balancer

Außerdem muss noch eine Einstellung in der Datei proxy.conf im Verzeichnis /etc/apache2/mods-available vorgenommen werden:

Ersetzen Sie die Zeilen

<Proxy *>
  AddDefaultCharset off
  Order deny,allow
  Deny from all
  #Allow from .example.com
</Proxy>

durch die folgenden Zeilen:

<Proxy *>
  Order allow,deny
  Allow from all
</Proxy>

Anschließend starten wir den Apache-Server mit /etc/init.d/apache2 restart neu, um die Einstellungen wirksam zu machen.

Apache testen

Rufen Sie im Webbrowser die IP-Adresse Ihres Servers auf, um die Erreichbarkeit des Webservers zu testen:

Abbildung  Aufruf des Webservers nach Installation



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen. >> Zum Feedback-Formular
 <<   zurück
  Zum Katalog
Zum Katalog: Ruby on Rails 2
Ruby on Rails 2
Jetzt bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Ruby on Rails 3.1






 Ruby on Rails 3.1


Zum Katalog: Responsive Webdesign






 Responsive Webdesign


Zum Katalog: Suchmaschinen-Optimierung






 Suchmaschinen-
 Optimierung


Zum Katalog: JavaScript






 JavaScript


Zum Katalog: Schrödinger lernt HTML5, CSS3 und JavaScript






 Schrödinger lernt
 HTML5, CSS3
 und JavaScript


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo




Copyright © Rheinwerk Verlag GmbH 2008
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de