Instalacja Ruby on Rails, Apache, mySQL i Passengera pod kontrolą REE na serwerze pod kontrolą Debiana 4.0 etch

30 stycznia 2009, 18:07:59

Poziom: 0 | Kategoria: Komputerowo-internetowo, Ruby, Ruby on Rails, Techblog. | 7 komentarzy

Ostatnio dane mi było instalować pełen stos programów potrzebnych do uruchomienia aplikacji w Railsach na serwerze pod kontrolą systemu Debian 4.0 etch minimal w wersji 64-bitowej. Ponieważ proces ten jest dosyć długi, opisuję go poniżej.

Wymagania wstępne i założenia

Opis nie będzie zawierał prawie żadnych instrukcji jak zabezpieczyć serwer, przy okazji zakładam kilka rzeczy:

Czynności wstępne

Na początku warto upewnić się, że mamy aktualną listę pakietów. W tym celu warto wykonać następujące czynności:

$ apt-get update
$ apt-get upgrade

Instalujemy też potrzebne pakiety:

$ apt-get install apt-utils build-essential ruby1.8-dev imagemagick libmysqlclient15off \
 libmysqlclient15-dev mysql-server mysql-common mysql-client memcached libxslt1-dev libpcre3-dev \
 zlib1g-dev unzip gzip libssl-dev libreadline5-dev libmysql-ruby sqlite3 imagemagick man-db cron wget lynx curl bind9 -y

Od razu możemy zmienić hasło roota MySQL:

$ mysqladmin -u root password NEWPASSWORD

Instalacja Ruby

Żeby korzystać z jedynie Ruby Enterprise Edition można opuścić ten punkt.

Ruby instalujemy ze źrodeł. W momencie tworzenia opisu w oficjalnych repozytoriach Debiana znalazłem wersję 1.8.5, a najnowszą stabilną wersją Ruby na stronie Ruby-Lang była wersja 1.8.6-p286. Pobieramy i rozpakowujemy źródła Ruby:

$ cd /usr/src
$ wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6-p286.tar.gz
$ tar zxf ruby-1.8.6-p286.tar.gz
$ cd ruby-1.8.6-p286

Przed konfiguracją edytujemy plik ext/Setup w celu dołączenia potrzebnych rozszerzeń. Powyższy plik może wyglądać tak:

 #Win32API
 #bigdecimal
 curses
 #dbm
 digest
 digest/md5
 #digest/rmd160
 digest/sha1
 digest/sha2
 dl
 enumerator
 #etc
 #fcntl
 #gdbm
 iconv
 #io/wait
 #nkf
 #pty
 openssl
 #racc/cparse
 readline
 #sdbm
 socket
 stringio
 strscan
 syck
 syslog
 #tcltklib
 thread
 #tk
 #win32ole
 zlib

Zawartość pliku oznacza, że chcemy skompilować Ruby wraz z rozszerzeniami curses, digest (md5, sha1/2), dl, enumerator, iconv, openssl, readline, socket, stringio, strscan, syck, syslog, thread, zlib.

Przyszła kolej na konfigurację, kompilację i instalację:

$ ./configure --prefix=/usr/local --with-openssl-dir=/usr \
 --with-readline-dir=/usr --with-zlib-dir=/usr
$ make
$ make install
$ make install-doc

Ostatnia linijka jest opcjonalna i odpowiedzialna za wygenerowanie dokumentacji.

Po zainstalowaniu interpretera języka Ruby przychodzi kolej na Rubygems:

$ cd /usr/src
$ wget http://rubyforge.org/frs/download.php/45905/rubygems-1.3.1.tgz
$ tar zxf rubygems-1.3.1.tgz
$ cd rubygems-1.3.1/
$ ruby setup.rb
$ gem isntall rubygems-update
$ update_rubygems
$ gem source --add http://gems.github.com

Ostatnia linijka dodaje do źródeł gemów repozytorium Github

Pora na instalacje potrzebnych gemów, moja proponowana lista:

gem install actionmailer actionpack actionwebservice active_graph \
 activerecord activeresource activesupport addressable archive-tar-minitar \ 
 bcrypt-ruby BlueCloth builder capistrano capistrano-ext cgi_multipart_eof_fix \
 chronic color columnize daemons eventmachine extlib fastercsv fastthread \ 
 feedtools gem_plugin haml highline hoe hpricot image_science \
 InlineAttachment json libxml-ruby linecache memcache-client metaid \
 mime-types mini_magick mislav-will_paginate mongrel mongrel_cluster \
 mongrel_proctitle needle net-scp net-sftp net-ssh net-ssh-gateway nokogiri \
 oauth passenger progressbar rack rails rake rcov RedCloth rmagick rspec \
 rspec-rails rspec_hpricot_matchers ruby-debug ruby-debug-base rubyforge \
 RubyInline rubyzip thin thor tlsmail transaction-simple uuid uuidtools \
 webrat wirble xml-simple youtube ZenTest

Instalacja Ruby Enterprise Edition

Ponieważ będziemy uruchamiać aplikację Rails z użyciem Passengera, możemy zredukować zużycie pamięci korzystając ze specjalnie przygotowanej wersji interpretera. Instalujemy go ze źródeł:

$ cd /usr/src
$ wget http://rubyforge.org/frs/download.php/50087/ruby-enterprise-1.8.6-20090113.tar.gz
$ tar zxf ruby-enterprise-1.8.6-20090113.tar.gz
$ cd ruby-enterprise-1.8.6-20090113/
$ ./installer

Wraz z REE zostaną zainstalowane rubygems oraz pewne gemy. Dodatkowe gemy instalujemy jak wyżej, z tym, że korzystamy ze zmodyfikowanej wersji Ruby:

/opt/ruby-enterprise-1.8.6-20090113/bin/ruby -S /opt/ruby-enterprise-1.8.6-20090113/bin/gem install capistrano  # ... i inne gemy

Instalacja Apache

Zainstalowałem apache2 wraz z pakietami apache2-mpm-worker, apache2-utils oraz apache2-prefork-dev

 apt-get install apache2 apache2-mpm-worker apache2-utils apache2-prefork-dev

Instalacja i konfiguracja Passengera obsługiwanego przez REE

Ponieważ gem Passengera został zainstalowany wcześniej pozostaje wygenerować odpowiedni moduł dla apache2:

 /opt/ruby-enterprise-1.8.6-20090113/bin/passenger-install-apache2-module

Pora na konfigurację. Wykorzystamy modułowość apache2 oraz program a2enmod do załadowania modułu. Tworzymy pliki /etc/apache2/mods-available/passenger.load z zawartością taką, jak wygenerowała nam instalacja modułu Passengera, np.:

  LoadModule passenger_module /opt/ruby-enterprise-1.8.6-20090113/lib/ruby/gems/1.8/gems/passenger-2.0.6/ext/apache2/mod_passenger.so

i /etc/apache2/mods-available/passenger.conf:

 PassengerRoot /opt/ruby-enterprise-1.8.6-20090113/lib/ruby/gems/1.8/gems/passenger-2.0.6
 PassengerRuby /opt/ruby-enterprise-1.8.6-20090113/bin/ruby

Po zapisaniu tych plików ładujemy moduł:

$ a2enmod passenger

I to już praktycznie wszystko, jedyne, co zostaje do zrobienia, to utworzenie konfiguracji vhosta dla konkretnej aplikacji, np. w /etc/apache2/sites-available, uaktywnienie jej programem a2ensite i przeładowanie apache.

Mam nadzieję, że powyższy opis pozwoli komuś zaoszczędzić trochę czasu.

Tagi:

Dziwne zachowanie config.gem w połączeniu z rspec-rails w Rails 2.2

16 stycznia 2009, 17:23:13

Poziom: 0 | Kategoria: Komputerowo-internetowo, Ruby, Ruby on Rails, Techblog. | 3 komentarze

Pracując ostatnio nad projektem zauważyłem dziwne rzeczy dziejące się w aplikacji. Po pierwsze w trybie deweloperskim po jakimkolwiek błędzie nie wyświetlał się stack trace. Jedyne, co się wyświetlało, to error code 500.

Już sam ten fakt był dla mnie dość uciążliwy, chociaż w tym przypadku zawsze można było odwołać się do logów aplikacji. Dużo gorszą rzeczą było nadpisanie przez coś wartości stałej RAILS_ENV i ustawienie jej na 'test'. Co ciekawe, wartość ENV['RAILS_ENV'] nadal wskazywała na poprawne środowisko.

Kiedy po zainstalowaniu RPM aplikacja nie chciała z nim współpracować (oczywiście działo się tak przez źle wskazujące RAILS_ENV) trzeba było znaleźć winnego. Po nitce do kłębka znalazłem wpis dotyczący znikających stack trace'ów. Okazało się, że wycięcie z pliku config/environment.rb linijki:

config.gem 'rspec-rails', :lib => 'spec/rails'

rozwiązało oba problemy!

Winowajcą jest linijka

silence_warnings { RAILS_ENV = "test" }

w pliku lib/spec/rails.rb gema rspec-rails.

Powyższy problem zdaje się nie występować w przypadku korzystania z rspeca w formie pluginu.

Tagi:

Wcześniejsze wpisy Nowsze wpisy