Ruby on Rails und nginx

Für ein neues Web-Projekt möchte ich mir Ruby on Rails anschauen. Um die Seite zu hosten muss ich meinem
Server beibringen, Rails auszuliefern. Nach einiger Recherche bin ich auf den Applikationsserver „Thin“  gekommen,
der mit meinem nginx mit am Besten harmonieren soll.

Hier also meine Schritte zur Installation von Thin und Einrichtung von nginx.

Zunächst benötige ich natürlich ruby auf dem Server. Dazu reichte unter Ubuntu 12.04 folgendes:

sudo apt-get install ruby rubygem ruby-dev sqlite3 libsqlite3-dev  

Weitere Pakete installiere ich, wenn ich sie benötige…
Dann werden Rails und Thin installiert:

gem install rails
gem install thin
thin install
usr/sbin/update-rc.d -f thin defaults

Um eine neue Ruby Applikation anzulegen bemühen wir Rails:

rails new /srv/www/rubytest

Dies legt eine vollständige Seite an, auf dessen Basis weiterentwickelt wird.
Danach bringen wir Thin bei, das er für diese Seite zuständig sein soll, zum Beispiel so:

thin config -C /etc/thin/rubytest -c /srv/www/rubytest --servers 1 -e development -a 127.0.0.1

Das erstellt einen Server mit Einstellungen für Development, also z.B. ohne Caching.
Für Produktionsumgebungen bietet es sich natürlich an, servers hochzustellen und statt
„development“ „production“ zu nehmen. Per Default nutzt Thin die Ports ab 3000, dies läßt
sich in der erstellten Konfigurationsdatei ändern, z.B. für weitere Seiten.

Zwei weitere Einstellungen müssen wir noch machen, und zwar an unserem Gemfile.
Zum einen die Zeile

# gem 'therubyracer', :platforms => :ruby

auskommentieren, zum anderen die Zeile

gem 'thin'

hinzufügen. Danach können wir einmal testen, ob Thin mit diesen Konfigurationen hochfährt, dazu
starten wir Thin mit

thin start -C /etc/thin/rubytest

Sollte im Logfile als letzte Zeile „Listening on…“ stehen, ist alles gut!

Nun geht’s an nginx. Der Einfachheit halber hier meine Vhost Konfiguration für die neue Seite:

upstream rubytest {
  server 127.0.0.1:3000;
}
server {
  listen  80;
  server_name rubytest;

  access_log /var/log/rubytest/access.log;
  error_log  /var/log/rubytest/error.log;
  root     /srv/www/rubytest;
  index    index.html;

  location / {
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header  Host $http_host;
    proxy_redirect  off;
    try_files /system/maintenance.html $uri $uri/index.html $uri.html @ruby;
  }

  location @ruby {
    proxy_pass http://rubytest;
  }
}

Die Datei liegt (bei mir) unter /usr/local/nginx/conf/sites-available, um sie zu aktivieren
gibts noch ein

ln -nfs /usr/local/nginx/conf/sites-available/rubytest /usr/local/nginx/conf/sites-enabled/rubytest

und nach einem nginx reload sollte die Rails Seite verfügbar sein!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.