Ruby on Rails
From Rootnode
Contents |
Na Rootnode możliwe jest skonfigurowanie własnego środowiska dla rozwoju swoich aplikacji Ruby on Rails.
Przygotowanie środowiska
Pamiętaj, że wszystkie operacje wykonujemy na przeznaczonej do tego maszynie (obecnie ciężkimi zadaniami zajmuje się Torvalds). Wyjątek stanowi rozdział dotyczący przekierowania ruchu www za pomocą .htaccess
Aktualizacja RubyGems i instalacja gemów w lokalnym katalogu
Przykładowa instalacja odbywa się do katalogu ~/.gems, jeśli planujesz zmienić katalog docelowy pamiętaj o dostosowaniu poleceń do rzeczywistości. Pierwszym opcjonalnym krokiem jest wyłączenie generowania dokumentacji dla instalowanych gemów - instalacja trwa wtedy krócej:
$ echo "gem: --no-rdoc --no-ri" > ~/.gemrc
Następnie tworzymy katalog src i ze ze strony http://RubyGems.org pobieramy najnowszą wersję (obecnie 1.3.5):
$ mkdir $HOME/src && cd $HOME/src $ wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz
Konfigurujemy zmienne środowiskowe, aby wskazywały na wybrany przez nas katalog. Powyższe polecenia działają tylko na czas trwania danej sesji. Jeśli nie chcemy ich wydawać przy każdym zalogowaniu, to należy je dopisać na końcu pliku konfiguracyjnego powłoki, np. dla Bash'a jest to plik ~/.bashrc.
$ export GEM_HOME="$HOME/.gems/ruby/1.8/" $ export GEM_PATH="$GEM_HOME:/var/lib/gems/1.8" $ export PATH="$GEM_HOME/bin:$PATH" $ export RUBYLIB="$HOME/.gems/lib"
Rozpakowujemy archiwum, przechodzimy do katalogu i instalujemy RubyGems:
$ tar xzf rubygems-1.3.5.tgz $ cd rubygems-1.3.5 $ ruby setup.rb --prefix=$HOME/.gems
Jeśli wszystko poszło tak jak należy sprawdzamy wersję gemów:
$ gem -v $ 1.3.5
Ruby on Rails
Na początek instalujemy odpowiednią wersje Ruby on Rails.
$ gem install rails
Niektóre aplikacje mogą jednak wymagać starszej wersji Ruby (np. Redmine). Należy wtedy dopisać parametr --version, np.:
$ gem install rails --version 2.1.2
Serwer Mongrel
Instalujemy Mongrela - serwer, na którym będzie działać aplikacja:
$ gem install mongrel
Instalacja sterownika do bazy danych
PostgreSQL
Do wyboru są dwie wersje natywna i przenośna - napisana w Ruby.
Natywna jest oczywiście szybsza i to ją wykorzystamy:
$ gem install postgres
Gdyby jednak ktoś bardzo chciał wersje sterownika w Ruby to:
$ gem install postgres-pr
MySQL
Wystarczy wykonać polecenie:
$ gem install mysql
Przykładowa aplikacja
| przykład |
Warunki startowe
- Login użytkownika na którym pracujemy to bongo - taki jest używany w poniższych przykładach
- Mamy już skonfigurowany vhost bongo.rootnode.net
Cel: Chcemy umieścić nasza aplikację pod adresem http://bongo.rootnode.net/aplikacja.
Stworzenie aplikacji
W katalogu domowym wykonujemy komendę:
$ rails _2.1.2_ aplikacja
Polecenie utworzy szkielet aplikacji Ruby on Rails w katalogu ~/aplikacja.
Parametr _2.1.2_ jest opcjonalny - wymusza utworzenie szkieletu aplikacji w wersji Ruby on Rails v2.1.2. Jeśli zostanie pominięty, to aplikacja zostanie utworzona w najnowszej dostępnej wersji Ruby on Rails.
Dalsze polecenia należy wywoływać w katalogu głównym aplikacji $RAILS_ROOT. Czyli w naszym przypadku ~/aplikacja.
Uruchomienie serwera
$ mongrel_rails start -d -p 6666 -e production
| Parametr | Opis |
| d | Serwer działa w trybie daemon, możemy bezpiecznie wyłączyć terminal, a aplikacja będzie działać w tle. |
| p | Numer portu na którym będzie działa aplikacja. Ważne jest, aby uprzednio sprawdzić, czy dany port jest wolny, np. nc localhost <port> powinno zwrócić Connection refused |
| e | tryb pracy aplikacji |
Start serwera trochę trwa - początkowo na stronie z aplikacją mogą się pojawiać komunikaty o błędach, np. 503. Start serwera można uznać za poprawny i zakończony, gdy w logu $RAILS_ROOT/log/mongrel.log pojawi się wpis:
** Mongrel 1.1.5 available at 0.0.0.0:6666 ** Writing PID file to log/mongrel.pid
Dopiero teraz powinniśmy zobaczyć naszą aplikację w przeglądarce WWW (pamiętajmy o odświeżeniu cache w przeglądarce: Ctrl+F5). Jeżeli jednak nie widzimy oczekiwanych efektów, to zanim zgłosimy się o pomoc, sprawdźmy czy strona widoczna jest z poziomu serwerów Rootnode:
$ elinks http://t.rootnode.net:6666
Powinna się pokazać tekstowa wersja naszej testowej aplikacji.
Zatrzymanie/restart serwera
Ta prosta operacja sprowadza się do użycia jednej z komend:
$ mongrel_rails stop
bądź
$ mongrel_rails restart
Podpięcie Railsów pod własnego vhosta
Kiedy mam już przygotowane środowisko na Torvaldsie, a aplikacja jest już uruchomiona, będziemy chcieli podpiąć ją pod naszego vhosta, wszak na razie jest dostępna pod brzydkim adresem http://t.rootnode.net:<port>. W tym celu skorzystamy z przekierowania na inny serwer przy użyciu .htaccess.
| przykład |
Zakładając, że serwer uruchomiony jest na porcie 6666.
# ~/www/bongo.rootnode.net/htdocs/.htaccess RewriteEngine on RewriteRule ^(.*)$ http://t.rootnode.net:6666/$1 [P,L]
Site media
Jeśli aplikacja pracuje w podkatalogu, to może nie widzieć plików ze stylami CSS, obrazkami i skryptami JavaScript. Aby to naprawić należy do pliku $RAILS_ROOT/config/environment.rb (na jego końcu) dopisać:
ActionController::AbstractRequest.relative_url_root = "/<URI do katalogu z mediami>"
Podobno dla Ruby on Rails 2.3 działa/jest preferowane (w dodatku ładniejsze) dodanie w w/w pliku w sekcji config wpisu:
config.action_controller.relative_url_root = "/<URI do katalogu z mediami>"
Po tej zmianie należy zrestartować serwer.
Crontab
- Aby aplikacja sama się uruchamiała po restarcie serwera, dodajemy do crontaba (polecenie crontab -e) następujące reguły:
@reboot rm <ścieżka do aplikacji>/log/mongrel.pid @reboot mongrel_rails start -c <ścieżka do aplikacji> -e production -p <port> -d
- Jeśli powyższe wpisy nie działałyby prawidłowo, można zastosować skrypt sprawdzający czy aplikacja pracuje i uruchamiający ją w razie konieczności, np:
#!/bin/bash
SERVICE='mongrel_rails'
RAILS_ROOT='<ścieżka do aplikacji>'
PORT=<port>
if ! ps ax | grep -v grep | grep $SERVICE > /dev/null
then
cd ~/${RAILS_ROOT}
mongrel_rails stop
mongrel_rails start -d -p ${PORT} -e production
fi
I dodać wywoływanie go w crontab'ie np. co 15min.
*/15 * * * * /<ścieżka do skryptu>/<nazwa pliku ze skryptem>.sh
- Pamiętajmy, że skrypty cron działają w odrębnym środowisku i mogą nie widzieć "naszych" zmiennych środowiskowych. Najprościej to ominąć poprzez dodanie na początku crontab:
SHELL=/bin/bash BASH_ENV=.bashrc MAILTO=<nasz mail>
Wpis MAILTO powoduje wysłanie wyników działania programów na podany adres e-mail.
Alternatywna instrukcja
Oto alternatywna metoda utworzenia środowiska ruby & rails na rootnode. Pozwala ona na posiadanie całego środowiska ruby/rails/etc. w wybranych wersjach wszystkich komponentów (z samym ruby włącznie). W skrócie: pomysł jest taki, żeby wszystko zainstalować w katalogu $HOME/opt. Jest to prostsze. W razie pytań proszę o kontakt. --dpc
Do ~/.bash_profile dodajemy:
export PATH="$HOME/opt/bin:$PATH"
Spowoduje to, że programy z $HOME/opt będą preferowane nad tymi zainstalowanymi globalnie w systemie. Odświeżamy:
$ source ~/.bash_profile
Tworzymy katalogi i instalujemy soft:
$ mkdir -p ~/src; mkdir -p ~/opt $ cd ~/src $ wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p174.tar.gz $ wget http://rubyforge.org/frs/download.php/60718/rubygems-1.3.5.tgz $ tar xzf ruby-1.8.7-p174.tar.gz $ tar xzf rubygems-1.3.5.tgz $ cd ruby-1.8.7-p174 $ ./configure --prefix=$HOME/opt $ make $ make install $ hash -r $ which ruby /home/<twoj_login>/opt/bin/ruby $ cd ../rubygems-1.3.5 $ ruby setup.rb
Po tym zabiegu powinniśmy dostać:
$ which gem /home/<twoj_login>/opt/bin/gem
Od tej chwili możemy używać poleceń ruby i gems w normalny sposób i kontynuować oryginalną instrukcję instalując niezbędne gemy.
