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
Version 1.4, April 2008 [Changelog]
Dieser Artikel ist eine Schritt-für-Schritt Anleitung zur Installation des beliebten Webframeworks Ruby on Rails auf einem Homepage-Server (und natürlich auch Managed-Server und Exklusiv-Server) des Providers 1&1. Dabei werden verschiedene Varianten vorgestellt, wie eine auf Ruby on Rails basierende Applikation ausgeliefert werden kann.
|
|
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. |
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, zugewiesen. Der Domain rails.example.com sollte das Verzeichnis
|
|
Wer es gar nicht erwarten kann, findet im Anhang eine Quickstart-Anleitung. |
Um Ruby on Rails nutzen zu können, müssen einige Programme und Bibliotheken nachinstalliert werden. Die Programme und Bibliotheken werden im Verzeichnis konfiguriert werden kann, so dass der Apache httpd keinen Zugriff auf die darin enthaltenen Dateien hat.
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 ist das Gegenstück zu CPAN (Perl) oder 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
|
|
In der 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<<EOF
gem: --no-rdoc --no-ri
gemhome: /kunden/homepages/17/d123456789/htdocs/executable/ruby/gems
gempath:
- /kunden/homepages/17/d123456789/htdocs/executable/ruby/gems
EOF
|
|
Alle via gem installierten RubyGems können einfach mit dem Kommando gem update aktualisiert werden. Alte Versionen werden dabei nicht automatisch entfernt, sondern müssen mit gem cleanup gelöscht werden. |
Die Installation von Ruby on Rails wird durch die RubyGems vergleichsweise einfach. Abhängigkeiten wie Rake werden damit automatisch mitinstalliert.
gem install rails
Je nachdem, wie Ruby On Rails später eingebunden wird, können wir noch die Bibliothek FCGI installieren.
Generell ist der Betrieb von Ruby on Rails über die FastCGI-Schnittstelle sehr zu empfehlen, da hierbei im Gegensatz zum klassischen CGI nicht für jede Anfrage ein eigener Prozess gestartet werden muss. Für Produktivumgebungen ist die Einbindung über FastCGI unbedingt zu empfehlen.
gem install fcgi
Damit wir bequem in der Shell arbeiten können und nicht bei jedem Login eine Datei namens .profile in unserem Homeverzeichnis mit den notwendigen Einträgen.
cat>>${HOME}/.profile<<EOF
export GEM_HOME="${HOME}/executable/ruby/gems"
export GEM_PATH="${HOME}/executable/ruby/gems"
export RUBYLIB="${HOME}/executable/ruby/lib:/usr/lib/ruby/1.8/"
export PATH="${HOME}/executable/ruby/bin:${HOME}/executable/ruby/gems/bin:${PATH}"
EOF
Da Ruby on Rails etwas wählerisch ist, was die URLs angeht, erstellen wir zunächst eine Subdomain namens rails.example.org und weisen dieser das Verzeichnis ~/rails.example.org/public auf dem Homepage-Server zu.
Prinzipiell muss nichts mehr geändert werden. Die Nutzung via CGI ist sofort nach der Installation möglich. Allerdings ist das auch die bei weitem langsamste Methode und nicht für Produktivsysteme geeignet.
Da wir RubyGems in ein anderes Verzeichnis installiert haben, müssen die Umgebungsvariablen zum richtigen Verzeichnis in der .htaccess gesetzt 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
# Alternativ zu der Umgebungsvariablen hier kann die Rails-Umgebung auch in
# der Datei config/environment.rb gesetzt werden.
SetEnv RAILS_ENV production
RewriteEngine On
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.cgi [QSA,L]
ErrorDocument 500 /500.html
Bei Homepage-Servern besteht die Möglichkeit, Skripte über die FastCGI-Schnittstelle einzubinden. Dieses Feature muss allerdings erst aktiviert werden. Außerdem muss muss das Gem FCGI installiert sein.
|
|
Informationen zu mod_fastcgi können in der offiziellen Dokumentation gefunden werden. |
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 $@
angepasst werden, wobei im Gegensatz zum Inhalt der Datei ~/.profile auf die
In diesem Abschnitt werden beispielhaft einige Anwendungen installiert, u .a. eine kleine Todo-Liste (Tracks) und ein Blog (Mephisto).
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 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
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
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.
Das praktische Tracks ist so etwas wie eine aufgemotzte To-Do Liste, die einen bei der 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 Control Center des Homepage-Servers legen wir eine Subdomain namens tracks.example.org an, die auf das Verzeichnis /tracks.example.org/public/ verweist.
|
|
Die Einrichtung von Subdomains und die 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 Control Center erstellt werden muss. Anschließend werden die Zugangsdaten in die Datei
cat>${HOME}/tracks.example.org/config/database.yml<<EOF
production:
adapter: mysql
database: db123456789
host: localhost
username: dbo123456789
password: geheim
EOF
Ebenso sollten wir nicht vergessen, in der Datei Wert für SALT einzutragen.
Mit den korrekten Zugangsdaten für die MySQL-Datenbank kann nun eine Initialisierung der Tabellen erfolgen.
cd ${HOME}/tracks.example.org
RAILS_ENV=production rake db:migrate
Tracks soll via FastCGI eingebunden werden. Wir ersetzen die .htaccess im
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
Außerdem muss die originale dispatch.fcgi in dispatch.orig.fcgi umbenannt werden und ein Wrapperskript mit Namen dispatch.fcgi und folgendem Inhalt angelegt werden:
#!/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 $@
Danach kann Tracks über die URL http://tracks.example.org/ aufgerufen werden.
Mephisto ist ein sehr gut anpassbares Blogsystem für Ruby on Rails. Da die aktuell stabile Version 0.7.3 nicht mit Rails 2.0.2 zusammenarbeitet, installieren wir die aktuelle Entwicklerversion auf dem Subversion-Repository. Zusätzlich ist das Gem tzinfo für den Betrieb notwendig.
cd ${HOME}
svn co http://svn.techno-weenie.net/projects/mephisto/trunk mephisto.example.org
gem install tzinfo
Im Control Center des Homepage-Servers legen wir eine Subdomain namens mephisto.example.org an, die auf das Verzeichnis /mephisto.example.org/public/ verweist.
|
|
Die Einrichtung von Subdomains und die Zuweisung eines DocumentRoots werden in der FAQ von 1&1 beschrieben. |
Für den Betrieb von Mephisto ist eine MySQL-Datenbank notwendig, die über das Control Center erstellt werden muss. Anschließend werden die Zugangsdaten in die Datei
cat>${HOME}/mephisto.example.org/config/database.yml<<EOF
production:
adapter: mysql
database: db123456789
host: localhost
username: dbo123456789
password: geheim
EOF
Mit den korrekten Zugangsdaten für die MySQL-Datenbank kann nun eine Initialisierung der Tabellen erfolgen.
cd ${HOME}/mephisto.example.org
RAILS_ENV=production rake db:bootstrap
Mephisto soll via FastCGI eingebunden werden. Wir ersetzen die .htaccess im
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
Außerdem muss die originale dispatch.fcgi in dispatch.orig.fcgi umbenannt werden und ein Wrapperskript mit Namen dispatch.fcgi und folgendem Inhalt angelegt werden:
#!/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 $@
Danach kann Mephisto über die URL http://mephisto.example.org/ aufgerufen werden.
Redmine ist ein praktisches Projektmanagement-Werkzeug, das alles bietet, was man für kleinere Projekte benötigt. Es weist einige Ähnlichkeiten zu dem bekannten Trac auf.
cd ${HOME}
wget http://rubyforge.org/frs/download.php/33789/redmine-0.6.4.tar.gz
tar -xzf redmine-0.6.4.tar.gz
mv redmine-0.6.4 redmine.example.org
Im Control Center des Homepage-Servers legen wir eine Subdomain namens redmine.example.org an, die auf das Verzeichnis /redmine.example.org/public/ verweist.
|
|
Die Einrichtung von Subdomains und die Zuweisung eines DocumentRoots werden in der FAQ von 1&1 beschrieben. |
Für den Betrieb von Redmine ist eine MySQL-Datenbank notwendig, die über das Control Center erstellt werden muss. Anschließend werden die Zugangsdaten in die Datei
cat>${HOME}/redmine.example.org/config/database.yml<<EOF
production:
adapter: mysql
database: db123456789
host: localhost
username: dbo123456789
password: geheim
EOF
Wenn die Zugangsdaten korrekt waren, können wir die Tabellen initialisieren und die Grundkonfiguration von Redmine vornehmen.
RAILS_ENV=production rake db:migrate RAILS_ENV=production rake redmine:load_default_data
Bei Aufruf von http://redmine.example.org/ erscheint nun eine Loginmaske. Die Zugangsdaten lauten Benutzer: admin, Passwort: admin. Das Passwort sollte schnellst möglich geändert werden, um einen unberechtigten Zugriff zu vermeiden.
Redmine soll via FastCGI eingebunden werden. Wir ersetzen die .htaccess im
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
Außerdem muss die originale dispatch.fcgi in dispatch.orig.fcgi umbenannt werden und ein Wrapperskript mit Namen dispatch.fcgi und folgendem Inhalt angelegt werden:
#!/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 $@
Danach kann Redmine über die URL http://redmine.example.org/ aufgerufen werden.
Dieser Abschnitt führt alle die Installation von Ruby on Rails notwendigen Kommandos auf einem Homepage-Server ohne zusätzliche Erklärungen auf. Wer es genauer wissen will, sollte den Artikel komplett lesen.
# Umgebungsvariablen setzen und dann in das aktuelle Environment laden
cat>>${HOME}/.profile<<EOF
export GEM_HOME="${HOME}/executable/ruby/gems"
export GEM_PATH=${GEM_HOME}
export RUBYLIB="${HOME}/executable/ruby/lib:/usr/lib/ruby/1.8/"
export PATH="${HOME}/executable/ruby/bin:${HOME}/executable/ruby/gems/bin:${PATH}"
EOF
source ${HOME}/.profile
# Installation und Konfiguration von RubyGems
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
ruby setup.rb all --no-rdoc --no-ri --no-format-executable --prefix=${HOME}/executable/ruby --siteruby=${HOME}/executable/ruby
cat>${HOME}/.gemrc<<EOF
gem: --no-rdoc --no-ri
gemhome: ${HOME}/executable/ruby/gems
gempath:
- ${HOME}/executable/ruby/gems
EOF
# Installation der nötigen RubyGems
gem install rails fcgi
# Erstellen der .htaccess im /public-Verzeichnis der Rails-Applikation
cat>${HOME}/rails.example.org/public/.htaccess<<EOF
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
EOF
# Erstellen des Wrapperskripts für FastCGI im /public-Verzeichnis der Rails-Applikation
mv ${HOME}/rails.example.org/public/dispatch.fcgi ${HOME}/rails.example.org/public/dispatch.orig.fcgi
cat>${HOME}/rails.example.org/public/dispatch.fcgi<<EOF
#!/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"
export RAILS_ENV="production"
exec ./dispatch.orig.fcgi $@
EOF
chmod +x ${HOME}/rails.example.org/public/dispatch.fcgi
Anpassung für neue Betriebsumgebung der Homepage-Server
RubyGems 1.1.0
Tracks 1.5 und Mephisto (SVN) als Beispiel-Applikationen
Ruby 1.8.6-p111
RubyGems 1.0.0
Rails 2.0.2
Mongrel 1.1.3
Thin 0.6.1
nginx 0.5.35
Tracks und Redmine als Beispiel-Applikationen
Ruby 1.8.6-p110
MySQL/Ruby 2.7.4
Rails 1.2.5
Mongrel 1.1.1
lighttpd 1.4.18
nginx 0.5.33
Ruby 1.8.6 (+Patch für OpenSSL)
RubyGems 0.9.4
Rails 1.2.3
Mongrel 1.0.1
lighttpd 1.4.15
nginx 0.5.22
Erste öffentliche Version.