RubyOnRails: Unterschied zwischen den Versionen

Aus Hostsharing Wiki
Zur Navigation springen Zur Suche springen
Zeile 67: Zeile 67:
=== Rails-Anwendung ===
=== Rails-Anwendung ===


Seine Rails-Anwendung kopiert man Beispielweise in ~/rails, oder erstellt dort eine Neue (rails ~/rails, ...).
Seine Rails-Anwendung kopiert man z.B. nach ~/rails, oder erstellt dort eine Neue (rails ~/rails, ...).


=== Datenbank ===
=== Datenbank ===

Version vom 27. August 2012, 07:41 Uhr

Bestes Ruby on Rails Hosting bei Hostsharing

Rubyanwendungen laufen (wie alle Anwendungen bei Hostsharing) als Prozesse der jeweiligen Paketuser. Probleme mit Dateirechten und Sicherheitsrisiken, wie sie sonst bei der Ausführung durch den Webserver auftreten, werden so von vorne herein ausgeschlossen.

Standardmäßig erfolgt der Aufruf von Ruby Anwendungen der User durch den Apache Webserver über die FastCGI Schnittstelle. Dabei wird im Betrieb ständig eine Ruby Application Server Instanz des Users bereitgehalten, die somit jederzeit zur Bearbeitung von noch nicht gecacheten, oder gar nicht cachebaren, Anfragen zur Verfügung steht.

Für den Betrieb von noch anspruchsvolleren 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 damit z.B. load-balancing auf unserer managed Plattform nutzen möchten, können dafür eigene Daemons buchen.

Einrichtung ohne zusätzliche Daemons (ein Application Server)

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 forget that extra parameter: ruby -rubygems prog_that_uses_gems
export RUBYOPT=rubygems

Eigene Installation

Um eine andere als die vorinstallierte Ruby Version zu verwenden, installiert 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 durch installieren des gem-Pakets installiert werden (inklusive Abhängigkeiten).

gem install rails

Um spezielle versionen zu installieren kann man gem Befehle mit "-v=x.y.z" ergänzen.

Rails-Anwendung

Seine Rails-Anwendung kopiert man z.B. nach ~/rails, oder erstellt dort eine Neue (rails ~/rails, ...).

Datenbank

Mit hsadmin beispielsweise einen Postgres-User (z.B. 'xyz00_rails', Passwort sei 'geheim') sowie eine Datenbank anlegen (z.B. 'xyz00_rails'.

Die Datenbank in der Anwendung 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

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, siehe https://github.com/dre3k/rails3_fcgi, ~/doms/www.example.org/fastcgi/dispatch.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'

Evtl. können diese Einstellungen auch ohne eine Modifikation der Anwendung erfolgen, indem die Umgebungsvariablen in der .htaccess gesetzt werden (z.B. "SetEnv RAILS_ENV production").

Die Applikation ins Webroot einbinden:

 # ggf. vorhandene Dateien sichern (oder nach ~/rails/public kopieren)
 mv ~/doms/rails.example.org/htdocs ~/doms/rails.example.org/htdocs.old
 # Das rails/public Verzeichnis ins Webroot verlinken.
 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.