Ruby on Rails: Instalacja i konfiguracja
Kontynuując poprzedni wpis wprowadzający do świata Ruby on Rails poruszymy dziś kwestię samej instalacji języka, frameworka oraz rozszerzeń oraz utworzymy pierwszą strukturę plików aplikacji w Ruby on Rails.
Nadmienię, że opisany przeze mnie proces instalacji podstawy Ruby odbywa się w środowisku linux (debian). Ponoć na Windowsie da się postawić Ruby + Rails ale są problemy z adapterem MySQL.
Przygotowanie systemu do instalacji
Na początek musimy przygotować nasz system, czyli zainstalować niezbędne nam pakiety (tutorial opisuję na bazie najnowszego stabilnego debiana – świeża instalacja). Na pewno będziemy potrzebowali curla do pobrania instalatora RVM – (Ruby Version Manager).
Procesu instalacji pakietów w Waszym linuksie chyba nie muszę opisywać 😉 używamy oczywiście odpowiedniego menadżera pakietów adekwatnie do posiadanej dystrybucji linuksa. Jeśli ktoś używający Mac OS X miałby problem to proszę pisać w komentarzach, pomogę w instalacji.
Z konta root (lub za pomocą sudo
) wykonujemy polecenie:
1 | aptitude update && aptitude install build-essential linux-headers-`uname -r` curl vim mc git |
Tak więc, zainstalowaliśmy podstawowe narzędzia do budowy oprogramowania, kompilatory, biblioteki, nagłówki kernela, curl oraz kilka dodatkowych narzędzi konsolowych takich jak: mc
(wizualny manager plików do konsoli), vim
(konsolowy edytor kodu), git
(system kontroli wersji – przyda się wam jeśli zechcecie pobrać archiwum z opisywaną aplikacją z mojego Githuba).
Następnie instalujemy serwer baz danych MySQL. Celowo oddzieliłem to od poprzedniego zestawu programów by wszystko było jasne. Podczas instalacji zostaniemy poproszeni o wprowadzenie nowego hasła dla administratora. W moim przypadku będzie to developer
– prawda, że nie do złamania? 🙂
1 | aptitude install mysql-server mysql-client libmysqlclient-dev |
Ze wstępnego przygotowania systemu to chyba wszystko. Przejdźmy do przygotowania bazy danych oraz instalacji samego języka, Ruby.
Instalacja Ruby
Na początek utwórzmy bazę danych do naszego projektu, niech się ona nazywa „webmastah”. Wpisujemy w konsoli poniższe, po czym wpisujemy wcześniej ustalone hasło.
1 | mysql -u root -p |
Następnie tworzymy bazę danych:
1 | CREATE DATABASE webmastah; |
Jeśli serwer zwróci: Query OK, 1 row affected
to wychodzimy z serwera baz danych:
1 | quit |
Baza została przygotowana, nie będę zagłębiał się w konsolowe zarządzanie użytkownikami bazy, bo do naszego tutoriala wystarczy użyć roota. Dla bardziej wymagających zachęcam do zapoznania się ze specyfikacją MySQL.
Są dwa sposoby na instalację Ruby, jednym z nich jest paczka z repozytorium dystrybucji lub menadżery wersji. My skupimy się na drugim rozwiązaniu ze względu na przestarzałe wersje pakietów w systemie. Za pomocą managera RVM będziemy mieli dostęp do każdej dostępnej wersji Ruby a co za tym idzie, Rails.
Aby zainstalować RVM oraz zainstalować najnowszą stabilną wersję Ruby wykonujemy poniższe polecenie. Wykonaj je z konta root aby zainstalować RVM globalnie, lub z konta użytkownika z użyciem sudo
aby zainstalować RVM w środowisku użytkownika.
1 | curl -L https://get.rvm.io | bash -s stable --ruby=2.0 |
Teraz czekamy, aż system pobierze manager oraz wszelkie zależności (w przypadku instalacji z konta zwykłego użytkownika zostaniemy poproszeni o hasło). Instalator pobierze binarki Ruby oraz niezbędne, brakujące zależności a następnie wszystko zainstaluje.
Po skończonej instalacji Ruby, musimy dodać wpis do pliku .bashrc
, który znajduje się w katalogu domowym.
1 | source /usr/local/rvm/scripts/rvm |
To polecenie może różnić się w zależności od wybranego typu instalacji. Ja w tym tutorialu instalowałem RVM z poziomu użytkownika root. Poprawne polecenie adekwatne do instalacji zwróci nam RVM po skończonej instalacji Ruby, w ostatnim komunikacie rozpoczynającym się od * To start using RVM you need to run..
.
Tak więc edytujemy nasz plik .bashrc i wklejamy na koniec pliku wyżej wymienione polecenie.
1 | mcedit ~/.bashrc |
Po poprawnej instalacji, wydajemy dla pewności polecenia
1 | rvm -v |
oraz
1 | ruby -v |
(Jeśli Ruby nie został zainstalowany, wydajemy polecenie rvm install ruby 2.0
).
Jeśli zwróci nam zainstalowaną wersję RVM oraz Ruby (w moim przypadku: rvm 1.22.9
oraz ruby 2.0.0p247
) oznacza to mały sukces 🙂
Instalacja Rails
Po poprawnej instalacji RVM oraz Ruby, czas na instalację samego frameworka – Rails. Zanim przejdziemy do instalacji, musimy wiedzieć czym jest GEM
ponieważ Rails jest jednym z GEMów języka Ruby.
RubyGems jest menadżerem paczek oraz bibliotek języka Ruby, pozwalając nam dowolnie rozszerzać język wybierając interesujące nas paczki i biblioteki z globalnej bazy RubyGems zawierającej ponad 60 000 gotowych rozwiązań. Wspominam o tym bo RubyGems jest kluczową sprawą podczas programowania w Ruby on Rails. Dla pewności upewniamy się, czy gem
został poprawnie zainstalowany.
1 | gem -v |
U mnie: 2.0.3
.
Jeśli wszystko jest w porządku instalujemy Railsy.
1 | gem install rails |
Chwilę to potrwa, w zależności od posiadanego sprzętu. Z racji, że opisuję instalację RoR w oparciu o maszynę wirtualną zajmie mi to na tyle czasu, że spokojnie mogę iść zaparzyć Yerba Mate 🙂
Po pewnym czasie otrzymujemy komunikat „28 gems installed”. Railsy zostały zainstalowane wraz z zależnościami i dokumentacją.
Sprawdzamy czy wszystko poszło po naszej myśli:
1 | rails -v |
Jeśli zwraca Rails 4.0.0
oznacza, że tak.
Nasze narzędzie jest gotowe do pracy. Załóżmy folder w którym będzie docelowo nasz projekt.
1 | cd ~ && mkdir -p www |
Wejdźmy do niego i wygenerujmy nasz pierwszy szkielet aplikacji.
1 | cd www |
1 | rails new webmastah |
Your bundle is complete!
Właśnie utworzyliśmy w katalogu webmastah
nasz pierwszy projekt w Ruby on Rails 🙂 Co prawda daleko jeszcze do tego by nazwać go projektem, ale szkielet już mamy. Podstawa do pracy gotowa. Mam nadzieję, że wszystkim instalacja poszła gładko.
Konfiguracja Rails
Po poprawnej instalacji Ruby oraz Rails, nadszedł czas na podstawową konfigurację naszego środowiska pracy.
Wchodzimy więc do katalogu gdzie wygenerowaliśmy nasz projekt „webmastah”.
1 | cd ~/www/webmastah |
Pierwszą rzeczą, którą musimy zrobić jest edycja pliku Gemfile
zawierającego źródło Gemów oraz listę wymaganych przez aplikację paczek. Na końcu pliku dodajemy na początek dwa podstawowe gemy, bez których nie uruchomimy naszej aplikacji.
Wsparcie dla JavaScript. Użytkownikom Ubuntu ponoć pomaga instalacja nodejs
.
Za pomocą naszego ulubionego edytora (używam vim
ale nieznającym zalecam użycie mcedit
) edytujemy plik Gemfile.
1 | mcedit Gemfile |
Dodajemy na końcu:
1 2 | gem 'therubyracer' gem 'execjs' |
Po wszystkim (jak zawsze po edycji listy gemów) wykonujemy bundlera (manager gemów).
1 | bundle install |
Dolewamy do Yerby gorącej wody z termosu i rozkoszujemy się chwilą wolnego czasu.
Your bundle is complete!
W fazie developerskiej nie będziemy instalować żadnego serwera wspomagającego Rails. Wystarczy nam wbudowany WEBrick
. Uruchamiamy testowo naszą aplikację by upewnić się, że niczego nie brakuje. Wydajemy z konsoli polecenie będąc w katalogu projektu.
1 | rails server |
Jeśli serwer nie wyrzuca sterty błędów i widzimy adres pod, którym zobaczymy aplikację możemy uznać ten etap za zakończony.
Jeśli uruchamiamy naszą aplikację na lokalnej maszynie (czyt. komputer na którym pracujemy), wystarczy wpisać w przeglądarce: http://127.0.0.1:3000
, jeśli nie, to musimy wpisać adres IP serwera z portem 3000.
A tak wygląda początkowa strona naszego projektu. Renderowana bezpośrednio z katalogu Gems (nie nasza aplikacja).
Sukces. Możemy zatrzymać nasz lokalny serwer WEBrick kombinacją ctrl + c
.
Omówmy teraz podstawową strukturę drzewa plików naszej aplikacji w Ruby on Rails.
Składa się ona z 10 folderów:
app
– główny katalog naszych klas, modeli, widokówbin
– katalog z plikami binarnymi, których używamy podczas pracy z RoRconfig
– pliki konfiguracyjne naszej aplikacjidb
– katalog na bazę danych oraz wszelkie z nią związane migracje i seedylib
– folder na zależne biblioteki, assetsy oraz zadanialog
– standardowe miejsce gdzie znajdziemy logi naszej aplikacjipublic
– katalog publiczny, który wystawiony jest na „świat”. W nim właśnie będziemy umieszczać statyczne pliki naszej aplikacji (css, js, obrazy)test
– miejsce na wszelkiego rodzaju testy (np. jednostkowe)tmp
– w tym katalogu znajdują się tymczasowe pliki typu cache, pliki procesów, sesje, gniazdavendor
– rolą tego folderu, jak to zawsze z vendorami bywa, jest dostarczanie zewnętrznych narzędzi.
Utworzyliśmy wcześniej bazę danych prawda? Przydałoby się podłączyć do niej naszą aplikację. Potrzebujemy do tego specjalnego adaptera o nazwie mysql2
, który oczywiście instalujemy z RubyGems. Edytujemy nasz plik Gemfile i dodajemy na końcu linię odpowiadającą adapterowi MySQL.
1 | gem 'mysql2' |
Nie zapominajmy o bundlerze 😉
1 | bundle install |
Następnie przejdźmy do pliku konfiguracyjnego /config/database.yml
Do środowiska pracy „development” powinno używać się sqlite3 by nie przysparzać sobie problemów, ale my jesteśmy hardkorami i zaprzęgniemy MySQL 🙂
W sekcji development
musimy nadpisać wszystko tak by wyglądało tak:
1 2 3 4 5 6 7 8 | development: adapter: mysql2 encoding: utf8 database: webmastah username: root password: developer host: 127.0.0.1 port: 3306 |
Uzupełniając oczywiście parametry konfiguracyjne własnymi danymi. U mnie baza danych nazywa się webmastah
a hasło do niej to developer
.
Wygenerujmy teraz nasz pierwszy kontroler, który będzie służył za wyjściowe przywitanie użytkownika (kontroler a ściślej jego akcja index będzie renderować widok z przywitaniem użytkownika po wejściu w główny adres naszej aplikacji).
1 | rails generate controller Welcome index |
Możemy użyć również skróconego zapisu: rails g controller Welcome index
W tej chwili został wygenerowany nasz pierwszy kontroler z jedną akcją index, którą podaliśmy jako drugi parametr generatora. Aby dodać więcej akcji podczas generowania kontrolera należy oddzielić spacją nazwy poszczególnych akcji.
Oto kod wygenerowane kontrolera /app/controllers/welcome_controller.rb
1 2 3 4 | class WelcomeController < ApplicationController def index end end |
W pierwszej linii widzimy, że kontroler automatycznie dziedziczy po klasie ApplicationController. Wraz z kontrolerem został wygenerowany widok dla naszej akcji. Jeśli podalibyśmy jako parametry więcej akcji, dla każdej z nich generator stworzyłby pliki.
/app/views/welcome/index.html.erb
Ścieżka do widoku, analogicznie odzwierciedla strukturę kontrolera wraz z akcją. Generator tworzy w folderze widoków, katalog o nazwie kontrolera oraz pliki dla każdej z akcji z rozszerzeniem .html.erb
.
Kontroler oraz widoki akcji zostały wygenerowane, czas na routing.
Przejdźmy do edycji pliku /config/routes.rb
. Dla klarowności usuńmy jego zwartość i zastąpmy ją nastepującym kodem (będziemy sukcesywnie dodawać odpowiednie wpisy routingu).
1 2 3 | Webmastah::Application.routes.draw do root 'welcome#index' end |
Tym samym wskazaliśmy za pomocą routingu root
nasz nowy kontroler oraz jego akcję index jako główne wywołanie.
welcome#index
Konkluzja
- Zainstalowaliśmy interpreter Ruby, manager do zarządzania wersjami Ruby RVM (dla niewtajemniczonych: możemy na jednej maszynie bez problemu zestawić kilka wersji Ruby oraz odpowiadającym im wersji Railsow w formie wrapperów co pozwoli nam na pracę w projektach pisanych na różnych wersjach/zestawach),
- zainstalowaliśmy serwer baz danych, utworzyliśmy naszą bazę oraz wskazaliśmy naszej aplikacji jak ma się komunikować z serwerem MySQL
- wygenerowaliśmy nasz pierwszy kontroler oraz ustawiliśmy root w routingu.
Podsumowując nasza aplikacja jest gotowa do pracy 🙂 Teraz czas na całe „mięso” ale o tym w kolejnym wpisie. Musimy ustalić tylko jakiego typu aplikację chcecie abym kontynuował w kolejnych wpisach tej serii. Dla ułatwienia w komentarzach zaproponuję 4 typy, a Wy za pomocą strzałek (odpowiedniki „lubię to”) wybierzcie tą, nad którą będziemy pracować:
- System zarządzania treścią (CMS)
- System aktualności/bloga (Railsowy, okrojony WordPress)
- Miniaturowe forum dyskusyjne (Działy, tematy, wpisy, użytkownicy)
- Sklep Internetowy
Zapraszam również do śledzenia repozytorium z naszą aplikacją dostępną na Github.com oraz obserwowania mnie na Twitterze, Google+.
Właśnie skończyłem pisać nowy wpis o Ruby on Rails na @webMASTAH_pl STAY TUNED! #rubyonrails #rails #nocnazmiana
— sbl (@sblmasta) September 15, 2013