RubyOnRails: Unterschied zwischen den Versionen
K (→Vorinstalliert) |
K (→Vorinstalliert) |
||
Zeile 24: | Zeile 24: | ||
==== Vorinstalliert ==== | ==== Vorinstalliert ==== | ||
Soll nur die zentral installierte Ruby Version verwendet werden, | Soll nur die zentral installierte Ruby Version verwendet werden, braucht man nur eine ~/.profile Datei anlegen, bzw. ergänzt eine vorhandene ~/.bashrc: | ||
# keep user's own ruby stuff below $HOME/ruby | # keep user's own ruby stuff below $HOME/ruby | ||
export PATH="$HOME/bin:$HOME/ruby/.gem/bin:$PATH" | export PATH="$HOME/bin:$HOME/ruby/.gem/bin:$PATH" |
Version vom 26. August 2012, 15:32 Uhr
Ruby on Rails bei Hostsharing
Um Probleme mit den Benutzerrechten von vorne herein auszuschließen, läuft Ruby (wie alle Anwendungen bei Hostsharing) mit den Rechten des jeweiligen Useraccounts. Die Ausführung erfolgt in den Webpaketen standardmäßig über die FastCGI Schnittstelle des Apache Webservers.
Für den Betrieb von sehr anspruchsvollen Anwendungen haben wir auch Tools wie haproxy, varnish, nginx etc. installiert. Wir können auch mod_passenger (mod_wsgi haben wir schon) oder mongrel oder Green Unicorn (gunicorn) installieren. Anwender, die solche Tools auf unserer managed Plattform nutzen wollen, brauchen dafür nur eigene Daemons buchen.
Vorbereitungen
Einige Einstellungen für den Paketuser.
~/.gemrc
install: --no-rdoc --no-ri update: --no-rdoc --no-ri
~/.bashrc
alias gem="nice -n19 gem"
Ruby
Vorinstalliert
Soll nur die zentral installierte Ruby Version verwendet werden, braucht man nur eine ~/.profile Datei anlegen, bzw. ergänzt eine vorhandene ~/.bashrc:
# keep user's own ruby stuff below $HOME/ruby export PATH="$HOME/bin:$HOME/ruby/.gem/bin:$PATH" export RUBYLIB="$HOME/ruby/lib:$RUBYLIB" export GEM_HOME="$HOME/ruby/.gem" export GEM_PATH="$GEM_HOME:$( gem env gempath )" export RAILS_ENV=production # avoid to require an extra parameter: ruby -rubygems prog_that_uses_gems export RUBYOPT=rubygems
Eigene Installation
Um eine andere als die vorinstallierte Ruby Version zu verwenden, istalliert man zunächst den Ruby Versions Manager (rvm),
curl -L https://get.rvm.io | bash -s stable source ~/.rvm/scripts/rvm rvm notes rvm requirements rvm pkg install openssl
und lässt dann die gewünschte Ruby Version installieren.
rvm install x.y.z
RVM passt die Umgebungsvariablen automatisch an die ausgewählt Version an. Die Version wählt man global per
rvm use x.y.z --default
oder nur für ein spezielles Verzeichnis:
cd ~/verzeichnis/mit/ruby-x.y.z-Anwendung rvm use x.y.z-p??? --rvmrc
Zur Verwaltung von gems installiert man noch rubygems.
rvm rubygems current
Rails
Nun kann Rails einfach durch installieren des gem-Pakets (mit seinen Abhängigkeiten) installiert werden.
gem install rails
Einrichtung
Rails-Anwendung
Seine Rails-Anwendung kopiert man Beispielweise in ~/rails, oder erstellt dort einen Neue (rails ~/rails, ...).
Datenbank
Mit hsadmin einen Postgres-User (z.B. 'xyz00_rails', Passwort sei 'geheim') und eine Datenbank anlegen (z.B. 'xyz00_rails'.
Die Datenbank konfigurieren,
cd ~/rails-app/config/ nano database.yml
mit folgendem Inhalt:
production: adapter: postgresql database: xyz00_rails host: localhost username: xyz00_rails password: geheim
E-Mail, Dateiablage
Beispielhafte Konfiguration:
default: email_delivery: delivery_method: :smtp smtp_settings: address: localhost port: 25 domain: example.org attachments_storage_path: /home/pacs/xyz00/users/rails/attach
Laden von Abhängigkeiten, Datenbankschema
Initialisieren und migrieren der Datenbank je nach Rails-Anwendung.
cd ~/rails ... rake ...
Konfiguration von FastCGI
~/doms/rails.example.org/htdocs/.htaccess
RewriteEngine On RewriteRule ^$ index.html [QSA] RewriteRule ^([^.]+)$ $1.html [QSA] RewriteCond %{REQUEST_FILENAME} !-f [OR] RewriteCond %{REQUEST_FILENAME} dispatch.fcgi$ RewriteRule ^(.*)$ /fastcgi-bin/dispatch.fcgi [QSA,L]
Ältere Versionen von Rails, die noch nicht auf rack middleware aufbauen, laufen mit folgender ~/doms/www.example.org/fastcgi/dispatch.fcgi
#!/usr/bin/env ruby require "/home/pacs/xyz00/users/meinuser/rails/config/environment" require 'fcgi_handler' RailsFCGIHandler.process!
Für aktuelle Versionen von Rails, die auf der "rack" Middleware aufbauen, ~/doms/www.example.org/fastcgi/dispatch.fcgi (siehe https://github.com/dre3k/rails3_fcgi)
#!/usr/bin/env ruby require_relative '../config/environment' class Rack::PathInfoRewriter def initialize(app) @app = app end def call(env) env.delete('SCRIPT_NAME') parts = env['REQUEST_URI'].split('?') env['PATH_INFO'] = parts[0] env['QUERY_STRING'] = parts[1].to_s @app.call(env) end end Rack::Handler::FastCGI.run Rack::PathInfoRewriter.new(HIER_APPLIKATIONSNAME_AUS_config/application.rb_EINTRAGEN::Application)
FastCGI-Skript ausführbar machen:
chmod 755 ~/doms/rails.example.org/fastcgi/dispatch.fcgi
Am Anfang von ~/rails/config/environment.rb einfügen:
ENV['RAILS_ENV'] ||= 'production' ENV['GEM_PATH'] ||= '/home/pacs/xyz00/users/meinuser/ruby/.gem/ruby/1.8:/var/lib/gems/1.8'
Die Inhalte von ~/doms/rails.example.org/public/ als webroot sichtbar machen:
# Vorhandene Dateien sichern. (Alternativ in ~/rails/public kopieren) mv ~/doms/rails.example.org/htdocs ~/doms/rails.example.org/htdocs.old ln -s ~/rails/public ~/doms/rails.example.org/htdocs
Konfiguration von SSL
Die Verzeichnisse ~/doms/rails.example.org/fastcgi-ssl/ und ~/doms/rail.example.org/htdocs-ssl/ werden analog zu bzw. anstelle von fastcgi und htdocs gefüllt.