cadego blog

Ein weiteres tolles WordPress-Blog

cadego blog header image 2

Rails 3.1.3 und verschiedene Ruby-Versionen

Januar 13th, 2012 · Keine Kommentare

Nach einiger Zeit bin ich dann doch bei Rails 3.1.3 und Ruby 1.9.3 gelandet. Eigentlich schick, wären da nicht noch ein paar Projekte die nur mit der 1.8.7-Version von Ruby und RoR 2.3.x laufen. ;-)
Immerhin wurde mein größtes Problem, eine 2.0.5 Rails version jetzt ersetzt. Problem bei der App war das “nette” 32Bit-Image (warum bieten Provider das noch an?), Memcached-Probleme(Broken pipe), schlechte Performance und ich das Grundprojekt mit einer der ersten öffentlichen Rails-Versionen gestartet habe. In der Migration hing noch ein Automarkt. *autsch* Es wurde also Zeit für ein Upgrade.
Auf dem Server laufen also unterschiedliche Ruby-Versionen.
Da ich das gemset-Handling von rvm nicht so mag, hab ich mir aus den Sourcen die ruby 1.9.3-Version gebaut.
Aufruf der Ruby-versionen:

/usr/local/bin/ruby #1.8.7 via apt-get install -> ruby 1.8.7 (2010-01-10 patchlevel 249) [i486-linux]
/usr/local/bin/ruby193 #ruby 1.9.3p0 (2011-10-30) [i686-linux]

Installation von Ruby 1.9.3:

wget http://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p0.tar.bz2
tar xfv ruby-1.9.3-p0.tar
cd ruby-1.9.3-p0
#Wichtig ist der programm-suffix: Zugriff auf ruby, gem & rake sind via ruby193, gem193 bzw. rake193
./configure --prefix=/usr/local --program-suffix=193 --with-readline-dir=/usr/local
make
make test
make install
#kleiner Check
pinky@brain:~# ruby193 -v
ruby 1.9.3p0 (2011-10-30) [i686-linux]
pinky@brain:~# gem193 -v
1.8.11
#Bingo & gleich noch Update & Github hinzufügen
gem193 update --system
gem193  sources -a http://gems.github.com
#zwei bis drei Gems installieren
gem193 install mysql mysql2 sqlite3 sass-rails
gem193 install journey
gem193 install therubyracer
gem193 install zbatery passenger
gem193 install haml haml-rails rspec-rails factory_girl_rails cucumber-rails capybara database_cleaner launchy devise will_paginate
gem193 install acts-as-taggable-on
#Rest via bundle

Nachdem beide Version auf dem Server laufen, müssen noch die Settings für Passenger und Apache2 geändert werden, da Passenger nur mit einer Ruby-Version läuft. Also eine Version (bei mir Ruby 1.8.7) läuft via mod_passenger und die App mit der 1.9.3 Ruby-version als Standalone Version und Proxy.

Apache2:

a2enmod proxy_balancer
a2enmod proxy_http
a2enmod proxy_connect
/etc/init.d/apache2 restart

Apache2 Config für eine Rails App mit Proxy-Support:

<VirtualHost ip:80>
ServerName xyz.de
#      ServerAlias *.xyz.de
<Proxy balancer://thinservers>
#wer die panda-updates überlebt hat, kann hier auch mehr server eintragen ;-)
#und immer schön mit der ip und nicht mit dem domainnamen arbeiten!
BalancerMember http://127.0.0.1:3333
</Proxy>
# Redirect all non-static requests to thin
RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ balancer://thinservers%{REQUEST_URI} [P,QSA,L]
ProxyPass / balancer://thinservers/
ProxyPassReverse / balancer://thinservers/
ProxyPreserveHost On
<Proxy *>
Order deny,allow
Allow from all
</Proxy>
DocumentRoot /app_path/public/
ProxyPass /images !
ProxyPass /stylesheets !
ProxyPass /javascripts !
ProxyPass /assets !
Alias /assets /app_path/public/images
Alias /images /app_path/public/images
Alias /stylesheets /app_path/public/stylesheets.
Alias /javascripts /app_path/public/javascripts.

AccessFileName .htaccess
ErrorLog /path/domain.err
CustomLog /path/domain.log combined
# deflate
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE application/xml application/xhtml+xml
AddOutputFilterByType DEFLATE application/rss+xml
AddOutputFilterByType DEFLATE application/javascript
</VirtualHost>

Jetzt noch die Application starten und im Normalfall sollte der Apache2 die Seiten ausliefern. In das Verzeichnis der Application wechseln.
Der Start erfolgt über

bundle exec zbatery -E production
oder mit passenger als Standalone-Version
/usr/local/bin/passenger start -a 127.0.0.1 -p 3333 -e production -d
App stoppen mit
/usr/local/bin/passenger stop

Für den Passenger existieren auch init-Scripte auf Github. Sonst funktioniert auch God.

Performance und sonstige Kleinigkeiten:
Ladezeit und das Ausliefern der Seiten ist wirklich nett. Hier meine Seite über Browsergames. Zm Vergleich noch meine Auto Ersatzteile und das Carport Angebot auf Cadego. Kein Vergleich ;)
Einzig das Ausliefern des Feeds und der Sitemap war etwas nervig. (HTML statt RSS und fehlerhafte Codierung )

#routes.rb
match '/feed.rss' => 'foo#feed', :defaults => { :format => :rss }
#controller
class FooController < ApplicationController
caches_action :feed
def feed
#wichtig!
headers['Content-Type'] = 'application/rss+xml; charset=utf-8'
le = Foo.public.last
if stale?(:etag => le, :last_modified => le.updated_at.utc)
respond_to do |format|
format.rss { render :action => 'feed.rss.builder', :layout => false }
end
end
end
end

Die Asset Pipeline lieferte im im Production bei mir keine Assets aus, was aber an Sprocket lag. Eine Umstellung auf die letzte Github-Version löste das Problem.
Ich sehe gerade, die Formatierung ist übel. Kann man sich ja auch rauskopieren. ;)

No related posts.

Tags: rails · ruby