Tässä oppaassa oletetaan, että sinulla on perustiedot Railsista lukemalla Getting Started with Rails Guide.
Tämä opas perustuu Rails 3.0:aan. Osa tässä esitetystä koodista ei toimi Railsin aiemmissa versioissa.
- 1 Komentorivin perusteet
- 1.1 rails new
- 1.2 rails server
- 1.3 rails generoi
- 1.4 rails-konsoli
- 1.5 rails dbconsole
- 1.6 rails plugin
- 1.7 rails runner
- 1.8 rails destroy
- 2 Rake
- 2.1 about
- 2.2 assets
- 2.3 db
- 2.4 doc
- 2.5 notes
- 2. Valitse rake notes:custom.6 routes
- 2.7 test
- 2.8 tmp
- 2.9 Miscellaneous
- 3 Railsin edistynyt komentorivi
- 3.1 Rails tietokantojen ja SCM:n kanssa
- 3.2 palvelin erilaisilla taustapalvelimilla
- Palautetta
1 Komentorivin perusteet
On olemassa muutamia komentoja, jotka ovat ehdottoman tärkeitä Railsin jokapäiväisen käytön kannalta. Järjestyksessä sen mukaan, kuinka paljon todennäköisesti käytät niitä ovat:
- rails console
- rails server
- rake
- rails generate
- rails dbconsole
- rails new app_name
Luotaan yksinkertainen Rails-sovellus, jotta voidaan käydä läpi kukin näistä komennoista asiayhteydessä.
1.1 rails new
Aluksi haluamme luoda uuden Rails-sovelluksen ajamalla komennon rails new Railsin asentamisen jälkeen.
Voit asentaa rails-jalokiven kirjoittamalla gem install rails, jos sinulla ei vielä ole sitä. Seuraa Rails 3 Release Notesin ohjeita
$ rails new commandsapp create create README.rdoc create .gitignore create Rakefile create config.ru create Gemfile create app ... create tmp/cache create tmp/pids create vendor/plugins create vendor/plugins/.gitkeep
Rails asettaa sinulle, mikä tuntuu valtavalta määrältä tavaraa näin pienelle komennolle! Sinulla on nyt koko Rails-hakemistorakenne, jossa on kaikki koodi, jota tarvitset yksinkertaisen sovelluksemme suorittamiseen heti laatikosta.
1.2 rails server
Rails server -komento käynnistää pienen WEBrick-nimisen web-palvelimen, joka tulee Rubyn mukana. Käytät tätä aina, kun haluat käyttää sovellustasi verkkoselaimen kautta.
WEBrick ei ole ainoa vaihtoehtosi Railsin palvelemiseen. Siihen palataan myöhemmin.
Ei muuta työtä, rails-palvelin pyörittää uutta kiiltävää Rails-sovellustamme:
Vain kolmella komennolla saimme aikaan Rails-palvelimen, joka kuuntelee porttia 3000. Mene selaimeen ja avaa http://localhost:3000, näet perus Rails-sovelluksen käynnissä.
Voit myös käyttää aliasta ”s” palvelimen käynnistämiseen: rails s.
Palvelin voidaan ajaa eri portissa käyttämällä -p-vaihtoehtoa. Oletuskehitysympäristön voi vaihtaa käyttämällä -e.
$ rails server -e production -p 4000
Vaihtoehto -b sitoo Railsin määritettyyn ip:hen, oletusarvoisesti se on 0.0.0.0.0. Voit ajaa palvelinta daemonina välittämällä -d-option.
1.3 rails generoi
Komento rails generoi käyttää malleja luodakseen koko joukon asioita. Suorittamalla rails generate itsestään saat listan käytettävissä olevista generaattoreista:
Voit myös käyttää aliasta ”g” kutsuaksesi generaattorikomentoa: rails g.
Voit asentaa lisää generaattoreita generaattorihelmien (generator gems) kautta, jotka ovat epäilemättä asentamiesi liitännäisten osia, ja voit jopa luoda omia!
Käyttämällä generaattoreita säästät paljon aikaa kirjoittamalla boilerplate-koodia, eli koodia, joka on välttämätöntä, jotta sovellus toimisi.
Tehdäänpä oma kontrollerimme controller-generaattorilla. Mutta mitä komentoa meidän pitäisi käyttää? Kysytään generaattorilta:
Kaikissa Railsin konsolin apuohjelmissa on ohjeteksti. Kuten useimmissa *nix-apuohjelmissa, voit kokeilla lisätä loppuun –help tai -h, esimerkiksi rails server –help.
Kontrollerigeneraattori odottaa parametreja muodossa generate controller ControllerName controllerName action1 action2. Tehdään Greetings-kontrolleri, jonka action on hello ja joka sanoo meille jotain mukavaa.
$ rails generate controller Greetings hello create app/controllers/greetings_controller.rb route get "greetings/hello" invoke erb create app/views/greetings create app/views/greetings/hello.html.erb invoke test_unit create test/functional/greetings_controller_test.rb invoke helper create app/helpers/greetings_helper.rb invoke test_unit create test/unit/helpers/greetings_helper_test.rb invoke assets create app/assets/javascripts/greetings.js invoke css create app/assets/stylesheets/greetings.css
Mitä kaikkea tämä generoi? Se varmisti, että sovelluksessamme oli joukko hakemistoja, ja loi kontrolleritiedoston, näkymätiedoston, toiminnallisen testitiedoston, apuvälineen näkymälle, javascript-tiedoston ja tyylilomaketiedoston.
Tarkistetaan kontrolleri ja muokataan sitä hieman (osoitteessa app/controllers/greetings_controller.rb):
class GreetingsController < ApplicationController def hello @message = "Hello, how are you today?" endend
Sitten näkymä, joka näyttää viestimme (tiedostossa app/views/greetings/hello.html.erb):
<h1>A Greeting for You!</h1><p><%= @message %></p>
Käynnistä palvelimesi käyttämällä rails serveriä.
$ rails server=> Booting WEBrick...
Varmista, ettei app/views/(controller) -osassa ole ”tilde backup” -tiedostoja, muuten WEBrick ei näytä odotettua tulosta. Tämä näyttää olevan bugi Rails 2.3.0:ssa.
Url tulee olemaan http://localhost:3000/greetings/hello.
Railsin mukana tulee generaattori myös tietomalleille.
Luettelon käytettävissä olevista kenttätyypeistä löydät TableDefinition-luokan column-metodin API-dokumentaatiosta.
Mutta sen sijaan, että generoisimme mallin suoraan (minkä teemme myöhemmin), perustetaan teline. Teline Railsissa on täydellinen joukko mallia, tietokantaan siirtyminen kyseistä mallia varten, kontrolleri mallin manipuloimiseksi, näkymät tietojen katselemiseksi ja manipuloimiseksi sekä testisarja jokaiselle edellä mainitulle.
Valmistamme yksinkertaisen resurssin nimeltä ”HighScore”, joka pitää kirjaa korkeimmasta pistemäärästämme pelaamissamme videopeleissä.
Generoija tarkistaa, että on olemassa hakemistot malleille, ohjaimille, apuohjelmille, ulkoasuille, toiminnallisille ja yksikkötesteille, tyylilomakkeille, luo näkymät, ohjaimen, mallin ja tietokannan migraation HighScorea varten (luo high_scores-taulukon ja kentät), huolehtii resurssin reitin ja uusia testejä kaikkea varten.
Migraatio vaatii, että me migroidaan, eli ajetaan jotain Ruby-koodia (joka elää tuossa 20100209025147_create_high_scores.rb:ssä) muuttamaan tietokantamme skeemaa. Mikä tietokanta? sqlite3-tietokanta, jonka Rails luo puolestamme, kun suoritamme komennon rake db:migrate. Puhumme Rakesta syvällisemmin hetken päästä.
Puhutaanpa yksikkötesteistä. Yksikkötestit ovat koodia, joka testaa ja tekee väitteitä koodista. Yksikkötestauksessa otamme pienen osan koodia, vaikkapa mallin metodin, ja testaamme sen tuloja ja lähtöjä. Yksikkötestit ovat ystäväsi. Mitä pikemmin teet rauhan sen tosiasian kanssa, että elämänlaatusi paranee huomattavasti, kun yksikkötestaat koodisi, sitä parempi. Vakavasti puhuen. Teemme sellaisen kohta.
Katsotaanpa käyttöliittymää, jonka Rails loi meille.
$ rails server
Mene selaimeesi ja avaa http://localhost:3000/high_scores, nyt voimme luoda uusia high scores -pisteitä (55,160 Space Invadersissa!)
1.4 rails-konsoli
Konsoli-komennon avulla pystyt vuorovaikutteisesti käsittelemään Rails-applikaatiotasi komentoriviltä. Alapuolella rails-konsoli käyttää IRB:tä, joten jos olet joskus käyttänyt sitä, olet kuin kotonasi. Tämä on hyödyllistä nopeiden ideoiden testaamiseen koodilla ja tietojen muuttamiseen palvelinpuolella koskematta verkkosivustoon.
Voit kutsua konsolia myös aliaksella ”c”: rails c.
Jos haluat testata jotain koodia muuttamatta mitään tietoja, voit tehdä sen kutsumalla rails console –sandbox.
$ rails console --sandboxLoading development environment in sandbox (Rails 3.1.0)Any modifications you make will be rolled back on exitirb(main):001:0>
1.5 rails dbconsole
rails dbconsole selvittää, mitä tietokantaa käytät, ja pudottaa sinut siihen komentorivikäyttöliittymään, jota käyttäisit sen kanssa (ja selvittää myös komentoriviparametrit, jotka annat sille!). Se tukee MySQL:ää, PostgreSQL:ää, SQLite:ä ja SQLite3:a.
Voit myös käyttää aliasta ”db” kutsuaksesi dbconsolea: rails db.
1.6 rails plugin
Rails plugin -komento yksinkertaistaa pluginien hallintaa. Liitännäiset voidaan asentaa nimen tai niiden arkisto-URL-osoitteiden perusteella. Sinulla täytyy olla Git asennettuna, jos haluat asentaa pluginin Git-reposta. Sama pätee myös Subversioniin.
$ rails plugin install https://github.com/technoweenie/acts_as_paranoid.git+ ./CHANGELOG+ ./MIT-LICENSE......
1.7 rails runner
runner ajaa Ruby-koodia Railsin yhteydessä ei-interaktiivisesti. Esimerkiksi:
$ rails runner "Model.long_running_method"
Voit kutsua runneria myös aliaksella ”r”: rails r.
Voit määritellä ympäristön, jossa runner-komennon tulee toimia, käyttämällä -e-kytkintä.
$ rails runner -e staging "Model.long_running_method"
1.8 rails destroy
Ajattele destroy-käskyä generate-käskyn vastakohtana. Se selvittää, mitä generate teki, ja kumoaa sen.
Voit myös käyttää aliasta ”d” kutsuaksesi destroy-komentoa: rails d.
2 Rake
Rake on Ruby Make, itsenäinen Ruby-apuohjelma, joka korvaa Unixin apuohjelman ”make”, ja käyttää ”Rakefile”- ja .rake-tiedostoja kootakseen listan tehtävistä. Railsissa Rakea käytetään tavallisiin hallintatehtäviin, erityisesti monimutkaisiin tehtäviin, jotka rakentuvat toistensa varaan.
Voit saada listan käytettävissäsi olevista Rake-tehtävistä, jotka usein riippuvat nykyisestä hakemistostasi, kirjoittamalla rake –tasks. Jokaisella tehtävällä on kuvaus, ja sen pitäisi auttaa sinua löytämään tarvitsemasi asia.
$ rake --tasks(in /home/foobar/commandsapp)rake db:abort_if_pending_migrations # Raises an error if there are pending migrationsrake db:charset # Retrieves the charset for the current environment's databaserake db:collation # Retrieves the collation for the current environment's databaserake db:create # Create the database defined in config/database.yml for the current Rails.env......rake tmp:pids:clear # Clears all files in tmp/pidsrake tmp:sessions:clear # Clears all files in tmp/sessionsrake tmp:sockets:clear # Clears all files in tmp/sockets
2.1 about
rake about antaa tietoa Rubyn, RubyGemsin, Railsin, Railsin osakomponenttien, sovelluksesi kansion, nykyisen Rails-ympäristön nimen, sovelluksesi tietokantasovittimen ja skeemaversion versionumeroista. Se on hyödyllinen, kun haluat kysyä apua, tarkistaa, voiko tietoturvakorjaus vaikuttaa sinuun, tai kun tarvitset joitain tilastoja olemassa olevasta Rails-asennuksesta.
2.2 assets
Voit esikompiloida app/assetsissa olevat assetit käyttämällä rake assets:precompile ja poistaa nämä kompiloidut assetit käyttämällä rake assets:clean.
2.3 db
Yleisimmin käytössä olevat tehtävät db: Rake-nimiavaruudessa ovat migrate ja create, ja kannattaa kokeilla kaikkia migraatioiden rake-tehtäviä (up, down, redo, reset). rake db:version on hyödyllinen vianmäärityksessä, sillä se kertoo tietokannan tämänhetkisen version.
Lisätietoa migraatioista löytyy Migrations-oppaasta.
2.4 doc
Nimiavaruudessa doc: on työkalut, joilla voit luoda dokumentaatiota sovelluksellesi, API- dokumentaatiota, oppaita. Dokumentaatio voidaan myös poistaa, mikä on hyödyllistä lähinnä koodipohjan keventämiseksi, esimerkiksi jos kirjoitat Rails-sovellusta sulautetulle alustalle.
- rake doc:app luo dokumentaatiota sovelluksellesi doc/app:iin.
- rake doc:guides luo Rails-oppaita doc/guides:iin.
- rake doc:rails luo API-dokumentaatiota Rails:ille doc/api:iin.
- rake doc:plugins tuottaa API-dokumentaation kaikille sovellukseen asennetuille liitännäisille doc/plugins-tiedostossa.
- rake doc:clobber_plugins poistaa kaikkien liitännäisten generoidun dokumentaation.
2.5 notes
rake notes hakee koodistasi kommentteja, jotka alkavat sanoilla FIXME, OPTIMIZE tai TODO. Haku tehdään tiedostoista, joiden pääte on .builder, .rb, .erb, .haml ja .slim sekä oletus- että mukautetuille huomautuksille.
Jos etsit tiettyä huomautusta, vaikkapa FIXME, voit käyttää rake notes:fixme. Huomaa, että annotaation nimi on kirjoitettava pienellä alkukirjaimella.
Voit käyttää koodissasi myös mukautettuja annotaatioita ja listata ne käyttämällä rake notes:customia määrittelemällä annotaation ympäristömuuttujalla ANNOTATION.
$ rake notes:custom ANNOTATION=BUG(in /home/foobar/commandsapp)app/model/post.rb: * Have to fix this one before pushing!
Käyttäessäsi erityisiä annotaatioita ja mukautettuja annotaatioita annotaation nimeä (FIXME, BUG jne.) ei näytetä tulostusrivillä.
2. Valitse rake notes:custom.6 routes
rake routes listaa kaikki määrittelemäsi reitit, mikä on hyödyllistä sovelluksen reititysongelmien jäljittämisessä tai antaa hyvän yleiskuvan sovelluksen URL-osoitteista, joihin yrität perehtyä.
2.7 test
Hyvä kuvaus yksikkötestauksesta Railsissa on kirjassa Opas Rails-sovellusten testaamiseen
Railsin mukana tulee testipaketti nimeltä Test::Unit. Railsin vakaus on testien käytön ansiota. Test: -nimiavaruudessa olevat tehtävät auttavat erilaisten toivottavasti kirjoitettavien testien suorittamisessa.
2.8 tmp
Rails.root/tmp-hakemisto on *nixin /tmp-hakemiston tavoin säilytyspaikka väliaikaisille tiedostoille, kuten istunnoille (jos käytät tiedostovarastoa tiedostoille), prosessin id-tiedostoille ja välimuistissa oleville toiminnoille.
Nimiavaruuden tmp: tehtävät auttavat tyhjentämään Rails.root/tmp-hakemiston:
2.9 Miscellaneous
- rake stats on hyvä tarkastella tilastoja koodistasi ja näyttää esimerkiksi KLOC:t (tuhansia rivejä koodia) ja koodin ja testien suhteen.
- rake secret antaa sinulle pseudosattumanvaraisen avaimen, jota voit käyttää istuntosalaisuutena.
- rake time:zones:all listaa kaikki aikavyöhykkeet, joista Rails tietää.
3 Railsin edistynyt komentorivi
Komentorivin edistyneempi käyttö keskittyy käyttökelpoisten (ajoittain yllättävienkin) vaihtoehtojen löytämiseen apuohjelmista ja niiden sovittamiseen tarpeisiisi ja tiettyyn työnkulkuun. Tässä on lueteltu muutamia niksejä Railsin hihasta.
3.1 Rails tietokantojen ja SCM:n kanssa
Uutta Rails-sovellusta luodessasi voit määrittää, millaista tietokantaa ja millaista lähdekoodinhallintajärjestelmää sovelluksesi käyttää. Tämä säästää muutaman minuutin ja varmasti monta näppäinpainallusta.
Katsotaanpa, mitä –git-vaihtoehto ja –database=postgresql-vaihtoehto tekevät meille:
Meidän oli luotava gitapp-hakemisto ja alustettava tyhjä git-tietovarasto, ennen kuin Rails lisäisi luomansa tiedostot tietovarastoon. Katsotaanpa, mitä se laittoi tietokantamme konfiguraatioon:
Se loi myös joitakin rivejä database.yml-konfiguraatioon, jotka vastaavat valintaamme PostgreSQL:stä tietokannaksi.
Ainut juju SCM-vaihtoehtojen käyttämisessä on se, että sinun täytyy ensin tehdä sovelluksesi hakemisto, sitten alustaa SCM:si, minkä jälkeen voit ajaa komennon rails new luodaksesi sovelluksesi perustan.
3.2 palvelin erilaisilla taustapalvelimilla
Monet ihmiset ovat luoneet suuren määrän erilaisia web-palvelimia Ruby-kielellä, ja monilla niistä voidaan käyttää Railsia. Versiosta 2.3 lähtien Rails käyttää Rackia verkkosivujen palvelemiseen, mikä tarkoittaa, että mitä tahansa Rack-käsittelijän toteuttavaa web-palvelinta voidaan käyttää. Näitä ovat WEBrick, Mongrel, Thin ja Phusion Passenger (muutamia mainitakseni!).
Lisätietoja Rack-integraatiosta on kohdassa Rails on Rack.
Käyttääksesi toista palvelinta, asenna vain sen helmi ja käytä sen nimeä ensimmäisenä parametrina komennolle rails-palvelin:
Palautetta
Sinua rohkaistaan auttamaan tämän oppaan laadun parantamisessa.
Jos näet kirjoitus- tai asiavirheitä, joita uskallat korjata, kloonaa rails-repository ja avaa uusi pull request. Voit myös pyytää commit-oikeuksia docrailsissa, jos aiot lähettää useita korjauksia. Commits tarkistetaan, mutta se tapahtuu sen jälkeen, kun olet lähettänyt panoksesi. Tämä arkisto yhdistetään säännöllisesti masterin kanssa.
Voit myös löytää epätäydellistä sisältöä tai tavaraa, joka ei ole ajan tasalla. Ole hyvä ja lisää puuttuva dokumentaatio masteriin. Tarkista Ruby on Rails Guides -ohjeet tyylin ja konventioiden osalta.
Jos jostain syystä huomaat jotain korjattavaa, mutta et pysty korjaamaan sitä itse, avaa ongelma.
Ja viimeisenä mutta ei vähäisimpänä, kaikenlainen Ruby on Rails -dokumentaatiota koskeva keskustelu on erittäin tervetullutta rubyonrails-docs-postituslistalla.