Tutustutaan Railsiin

Luodaan uusi sovellus ja avataan se tekstieditorissa

Oletetaan että sinulla on nyt Rails asennettuna (löytyy atkin koneilta esimerkiksi). Luo komentoriviltä uusi sovellus kirjoittamalla kotihakemistossasi

rails new chat

Tämän jälkeen asenna jokin tekstieditori, mieluiten sellainen jolla on helppo käsitellä useita tiedostoja samaan aikaan, esimerkiksi Sublime Text . Avaa kotihakemistoosi ilmestynyt chat -kansio tekstieditorilla. Huomaat että sinne on generoitu paljon erilaisia kansioita ja tiedostoja. Rails perustuu tiedostojen automaattigeneroinnille niin, että itse ohjelmointi olisi mahdollisimman helppoa. Tässä vaiheessa ei ole tärkeää tietää jokaisen tiedoston merkitystä, sillä tutustumme jokaiseen tarpeelliseen osaan kerrallaan.


Model-View-Controller -arkkitehtuuri

Luodaan malli käyttäjästä (User) ja käynnistetään palvelin

Rails perustuu Model-View-Controller- eli MVC-arkkitehtuuriin. Modelit ovat luokkia, joista luodaan olioita ja jotka tallettavat ja hakevat tietoa tietokannasta. Viewit ovat ihmiselle näkyvä osa. Controllerit yhdistävät Modelit ja Viewit.

Modelit ovat .rb-päätteisiä ruby-luokkia. Tässä materiaalissa oletetaan että olet tutustunut jo esimerkiksi Javan olioihin. Railsin Modeleiden oliot tallennetaan tietokantaan automaattisesti ActiveRecord -nimisen systeemin kautta. Activerecord siis yhdistää tietokannan rivit olioiksi niin, ettei ohjelmoijan tarvitse kirjoittaa monimutkaisia SQL-lauseita. Riittää kun osaa käyttää olioita.


Controllerit huolehtivat tiedonkulusta Modeleiden ja Viewien välillä. Modelit ja Viewit kun ovat täysin erilaisia asioita, Modelit luokkia ja Viewit .html.erb -tiedostoja. Html-erb-päätteinen tiedosto on html-tiedosto, jonka sisällä on <% %> -tageissa Ruby-koodia ja jota Rails osaa tulkita. Rails tekee html.erb-tiedostoista html-tiedostoja ohjelman suorittamisessa. Esimerkiksi koodi



<%= link_to 'New User', new_user_path %>

näkyy sivulla selaimessa vieraillessa sourcekoodia tutkittaessa koodina




Luodaan ensimmäinen model, controller ja view kaikki yhdellä kertaa kirjoittamalla chat-hakemistossa komentorivillä

rails g scaffold User name:string

Scaffold luo Userille model-, controller- ja view-tiedostoja. Sen jälkeen komennolla

rake db:migrate

ajetaan tietokantamigraatiot eli se luo User-taulun tietokantaamme. Sen jälkeen lisää config/routes.rb -tiedostoon rivi joka asettaa kaikki käyttäjät listaavan sivun juureksi:

root 'users#index'

Nyt kun käynnistät sovelluksen chat-hakemistosta komennolla

rails s

niin osoitteessa localhost:3000 sinulla pitäisi olla sovellus.

Tehtävä: Tutki sovellustasi selaimessa, erityisesti Useriin liittyviä toiminnallisuuksia. Scaffold-komento nimittäin loi esimerkiksi mahdollisuuden luoda uusi käyttäjä, näyttää sen tiedot sekä tuhota käyttäjä. Testaa sovellustasi.

Palataan vielä tutkimaan Useriin liittyvää generoitua koodia

Model tiedostossa app/models/user.rb on tyhjä luokka. Se kuitenkin perii ActiveRecord::Base -luokan eli sen käytössä on esimerkiksi konstruktori ja attribuuttien setterit ja getterit, jotka hakevat ja asettavat arvoja suoraan tietokantaan. Kokeillaan näitä ominaisuuksia Railsin komentoriviltä


rails c

Luodaan uusi User Railsin komentorivillä komennolla


user1 = User.new name:"nimi"

Huomataan että tämä ei anna user1:ille id:tä ja komentorivi kertoo sen id:n olevan nil. Id on luku, joka annetaan jokaiselle tietokantaan talletettavalle oliolle, ja saman luokan toisella oliolla ei saa olla samaa id:tä. Id:tä käytetään myöhemmin olion tietoja tietokannasta haettaessa. User1 saa id:n vasta kun se tallennetaan tietokantaan komennolla


user1.save!

Nyt saamme tietää u:n id:n komennolla


user1.id

Uuden olion luonnin ja tallettamisen tietokantaan voi tehdä helpomminkin. Komento


user2 = User.create name:"nimi2"

luo uuden Userin jonka nimi on nimi2, ja tallettaa sen tietokantaan. Nyt tarkista vielä user2:n id, se pitäisi olla yhtä suurempi kuin aiemman talletetun olion id.


Sovellus nettiin

Siirretään softa Gitin avulla Heroku-palvelun hostattavaksi

Keskustelukysymys: Mikä on versionhallinta? Mikä on Git? Mihin tarvitaan versionhallintaa?

Jos Git ei ole aiemmin tuttu niin tutustu peruskomentoihin

Ennen sovelluksen nettiin laittamista täytyy määritellä tuotantotietokannaksi Postgresql, sillä Heroku ei tue SQlite -tietokantaa. Vaihda Gemfile-tiedoston rivi


gem 'sqlite3'

riveiksi


group :development, :test do
  gem 'sqlite3'
end
group :production do
  gem 'pg'
end


Siirrämme sovelluksen nyt nettiin Heroku-palveluun. Luo Herokuun tunnus täältä. Asenna Heroku Toolbelt eli Herokun komentorivikäyttöliittymä täältä. Kirjaudu ohjeen mukaisesti sisään. Luo Heroku-sovellus chat-hakemistossasi seuraavalla komennolla muuttaen pihlanchatti-nimen haluamaksesi:




Seuraava teksti olettaa että sinulla on versionhallintajärjestelmä Git asennettuna. Alustetaan tyhjä Git-repositorio chat-hakemistossa komennolla


git init

Sen jälkeen asetetaan Git-repositoriomme etärepositorioksi Herokun kertoma repositorio, minun tapauksessani siis

git remote add heroku https://git.heroku.com/pihlanchatti.git

Toistuvat Git-komennot

Koko sovellus pushataan Herokun git-remoteen seuraavilla komennoilla:


git add -A
git commit -am "kuvaus commitista"
git push heroku master



Se ei kuitenkaan vielä toimi koska Herokussa pitää vielä ajaa tietokantamigraatiot komennolla

heroku run rake db:migrate

Nyt sovelluksesi löytyy siis osoitteesta jonka Heroku ilmoitti ylläolevan kuvan mukaan sitä luodessasi.