Guides.rubyonrails.org

Ez a bemutató feltételezi, hogy a Rails alapszintű ismeretekkel rendelkezik a Getting Started with Rails Guide elolvasása alapján.

Ez az útmutató a Rails 3.0-ra épül. Az itt bemutatott kódok egy része nem fog működni a Rails korábbi verzióiban.

1 Parancssori alapok

Létezik néhány olyan parancs, amely feltétlenül szükséges a Rails mindennapi használatához. Aszerint a sorrendben, hogy valószínűleg milyen gyakran fogod használni őket:

  • rails console
  • rails server
  • rake
  • rails generate
  • rails dbconsole
  • rails new app_name

Elkészítünk egy egyszerű Rails alkalmazást, hogy az egyes parancsokat összefüggéseikben végigjárjuk.

1.1 rails new

Az első dolog, amit tenni akarunk, hogy létrehozunk egy új Rails alkalmazást a Rails telepítése után a rails new parancs futtatásával.

A rails gemet a gem install rails beírásával telepíthetjük, ha még nincs meg. Kövesd a Rails 3 Release Notes

$ 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

A Rails egy ilyen aprócska parancshoz képest hatalmasnak tűnő mennyiséget állít be! Most már a teljes Rails könyvtárszerkezetet megkaptad az összes kóddal, amire szükséged van ahhoz, hogy egyszerű alkalmazásunkat azonnal futtasd.

1.2 rails server

A rails server parancs elindít egy WEBrick nevű kis webkiszolgálót, amely a Ruby-val együtt érkezik. Ezt fogja használni minden olyan esetben, amikor webböngészőn keresztül szeretné elérni az alkalmazását.

A WEBrick nem az egyetlen lehetőség a Rails kiszolgálására. Erre később még visszatérünk.

A rails szerver minden további nélkül futtatja az új, csillogó Rails alkalmazásunkat:

Három paranccsal felhúztunk egy Rails szervert, amely a 3000-es porton figyel. Menjünk a böngészőnkbe és nyissuk meg a http://localhost:3000, látni fogjuk, hogy egy alap Rails alkalmazás fut.

A szervert az “s” aliasszal is elindíthatjuk: rails s.

A szervert a -p opcióval más porton is futtathatjuk. Az alapértelmezett fejlesztőkörnyezet megváltoztatható a -e kapcsolóval.

$ rails server -e production -p 4000

A -b kapcsoló a megadott ip-hez köti a Rails-t, alapértelmezés szerint ez a 0.0.0.0.0. A szervert démonként is futtathatjuk a -d kapcsoló átadásával.

1.3 rails generate

A rails generate parancs sablonokat használ egy csomó dolog létrehozásához. A rails generate önmagában történő futtatása a rendelkezésre álló generátorok listáját adja:

A “g” aliasszal is meghívhatod a generátor parancsot: rails g.

Még több generátort telepíthetsz a generator gems segítségével, a kétségtelenül telepítendő pluginok részeit, és akár sajátokat is létrehozhatsz!

A generátorok használatával rengeteg időt spórolhatsz meg a boilerplate kód megírásával, olyan kódot, ami szükséges az alkalmazás működéséhez.

Készítsük el a saját kontrollerünket a controller generátorral. De milyen parancsot használjunk? Kérdezzük meg a generátort:

Minden Rails konzolos segédprogramnak van súgószövege. Mint a legtöbb *nix segédprogram esetében, megpróbálhatjuk a –help vagy -h hozzáadásával a végére, például rails server –help.

A controller generátor paramétereket vár a generate controller ControllerName action1 action2 formában. Készítsünk egy Greetings kontrollert hello akcióval, ami valami kedveset fog mondani nekünk.

$ 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

Mi mindent generált ez? Meggyőződött róla, hogy egy csomó könyvtár van az alkalmazásunkban, és létrehozott egy vezérlőfájlt, egy nézetfájlt, egy funkcionális tesztfájlt, egy segédfájlt a nézethez, egy javascriptfájlt és egy stíluslapfájlt.

Nézzük meg a vezérlőt, és módosítsuk egy kicsit (az app/controllers/greetings_controller.rb):

class GreetingsController < ApplicationController def hello @message = "Hello, how are you today?" endend

Majd a nézetet, hogy megjelenítse az üzenetünket (az app/views/greetings/hello.html.erb-ben):

<h1>A Greeting for You!</h1><p><%= @message %></p>

Tüzeljük fel a szervert a rails szerver segítségével.

$ rails server=> Booting WEBrick...

GYőződjünk meg róla, hogy az app/views/(controller)-ben nincsenek “tilde backup” fájlok, különben a WEBrick nem fogja a várt kimenetet megjeleníteni. Úgy tűnik, ez egy hiba a Rails 2.3.0-ban.

Az URL http://localhost:3000/greetings/hello.

A Rails rendelkezik generátorral az adatmodellekhez is.

A rendelkezésre álló mezőtípusok listáját a TableDefinition osztály column metódusának API dokumentációjában találjuk.

De ahelyett, hogy közvetlenül generálnánk egy modellt (amit később fogunk csinálni), állítsunk fel egy állványzatot. Egy scaffold a Railsben egy teljes modellkészlet, adatbázis-migráció a modellhez, vezérlő a modell manipulálásához, nézetek az adatok megtekintéséhez és manipulálásához, és egy tesztcsomag a fentiek mindegyikéhez.

Elkészítünk egy egyszerű “HighScore” nevű erőforrást, amely nyomon követi a legmagasabb pontszámunkat az általunk játszott videojátékokban.

A generátor ellenőrzi, hogy léteznek-e a modellek, vezérlők, segédprogramok, elrendezések, funkcionális és egységtesztek, stíluslapok könyvtárai, létrehozza a nézeteket, vezérlőt, modellt és adatbázis-migrációt a HighScore számára (létrehozza a high_scores táblát és a mezőket), gondoskodik az erőforrás útvonaláról, és új teszteket készít mindenhez.

A migráció megköveteli, hogy migráljunk, azaz futtassunk néhány Ruby kódot (ami abban a 20100209025147_create_high_scores.rb-ben él), hogy módosítsuk az adatbázisunk sémáját. Melyik adatbázis? Az sqlite3 adatbázis, amelyet a Rails hoz létre helyettünk, amikor futtatjuk a rake db:migrate parancsot. A Rake-ről még részletesen beszélünk egy kicsit később.

Beszéljünk a unit tesztekről. A unit tesztek olyan kódok, amelyek tesztelnek és állításokat tesznek a kódról. Az egységtesztelés során vesszük a kód egy kis részét, mondjuk egy modell egy metódusát, és teszteljük annak bemeneteit és kimeneteit. Az egységtesztek a barátod. Minél hamarabb megbékélsz azzal a ténnyel, hogy az életminőséged drasztikusan megnő, ha egységteszteled a kódodat, annál jobb. Komolyan. Mindjárt készítünk egyet.

Lássuk a felületet, amit a Rails készített nekünk.

$ rails server

Menj a böngésződbe és nyisd meg a http://localhost:3000/high_scores-t, most már tudunk új magas pontszámokat létrehozni (55,160 a Space Invaders-ben!)

1.4 rails console

A konzol parancs segítségével a Rails alkalmazásoddal a parancssorból tudsz kapcsolatba lépni. Alulról nézve a rails console az IRB-t használja, így ha már használtad valaha, akkor otthonosan mozogsz majd. Hasznos lehet gyors ötletek tesztelésére a kóddal és adatok szerveroldali módosítására anélkül, hogy hozzá kellene nyúlni a weboldalhoz.

A “c” aliasszal is meghívhatod a konzolt: rails c.

Ha néhány kódot szeretnél tesztelni anélkül, hogy bármilyen adatot megváltoztatnál, akkor ezt a rails console –sandbox meghívásával teheted meg.

$ 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

a rails dbconsole kitalálja, hogy melyik adatbázist használod, és belehelyez téged abba a parancssori felületbe, amelyet használni szeretnél vele (és kitalálja a parancssori paramétereket is, amelyeket megadhatsz neki!). Támogatja a MySQL, PostgreSQL, SQLite és SQLite3 rendszereket.

A “db” aliasszal is meghívhatja a dbconsole-t: rails db.

1.6 rails plugin

A rails plugin parancs egyszerűsíti a pluginok kezelését. A pluginokat név vagy a repository URL-jük alapján lehet telepíteni. A Gitnek telepítve kell lennie, ha egy plugint egy Git repóból akar telepíteni. Ugyanez érvényes a Subversionre is.

$ rails plugin install https://github.com/technoweenie/acts_as_paranoid.git+ ./CHANGELOG+ ./MIT-LICENSE......

1.7 rails runner

a runner Ruby kódot futtat a Rails kontextusában nem interaktívan. Például:

$ rails runner "Model.long_running_method"

A runner meghívására használhatja az “r” aliast is: rails r.

A -e kapcsolóval megadhatja a környezetet, amelyben a runner parancsnak működnie kell.

$ rails runner -e staging "Model.long_running_method"

1.8 rails destroy

A destroy-t a generate ellentétének tekinti. Kitalálja, hogy mit csinált a generate, és visszacsinálja.

A destroy parancsot a “d” aliasszal is meghívhatod: rails d.

2 Rake

A Rake a Ruby Make, egy önálló Ruby segédprogram, amely a Unix ‘make’ segédprogramot helyettesíti, és egy ‘Rakefile’-t és .rake fájlokat használ a feladatok listájának összeállításához. A Railsben a Rake a közös adminisztrációs feladatokhoz használatos, különösen a bonyolult, egymásra épülő feladatokhoz.

A rake –tasks beírásával megkaphatod a rendelkezésedre álló Rake feladatok listáját, ami gyakran az aktuális könyvtáradtól függ. Minden feladathoz tartozik egy leírás, ami segíthet megtalálni azt, amire szükséged van.

$ 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

a rake about információt ad a Ruby, a RubyGems, a Rails, a Rails alkomponensek, az alkalmazásod mappája, az aktuális Rails környezet neve, az alkalmazásod adatbázis-adaptere és a séma verziója verziószámáról. Hasznos, ha segítséget kell kérned, ellenőrizni, hogy egy biztonsági javítás hatással lehet-e rád, vagy ha szükséged van néhány statisztikára egy meglévő Rails telepítéshez.

2.2 assets

A rake assets:precompile segítségével előfordíthatod az app/assets-ben lévő eszközöket, és a rake assets:clean segítségével eltávolíthatod ezeket a lefordított eszközöket.

2.3 db

A leggyakoribb feladatok a db: Rake névtérben a migrrate és a create, és érdemes kipróbálni az összes migrációs rake feladatot (up, down, redo, reset). a rake db:version hasznos a hibaelhárítás során, megmondja az adatbázis aktuális verzióját.

A migrációkkal kapcsolatos további információk a Migrations útmutatóban találhatók.

2.4 doc

A doc: névtérben az alkalmazás dokumentációjának, API dokumentációjának, útmutatóknak a létrehozásához szükséges eszközök találhatók. A dokumentáció lecsupaszítható is, ami főleg a kódbázis karcsúsításához hasznos, például ha beágyazott platformra írsz Rails alkalmazást.

  • A rake doc:app dokumentációt generál az alkalmazásodhoz a doc/app-ban.
  • A rake doc:guides Rails útmutatókat generál a doc/guides-ban.
  • A rake doc:rails API dokumentációt generál a Rails-hoz a doc/api-ban.
  • rake doc:plugins az alkalmazásba telepített összes plugin API dokumentációját generálja a doc/plugins-ban.
  • rake doc:clobber_plugins eltávolítja az összes plugin generált dokumentációját.

2.5 notes

a rake notes átnézi a kódot a FIXME, OPTIMIZE vagy TODO kezdetű megjegyzések után. A keresés a .builder, .rb, .erb, .haml és .slim kiterjesztésű fájlokban történik mind az alapértelmezett, mind az egyéni megjegyzések esetében.

Ha egy konkrét megjegyzést keres, mondjuk FIXME, akkor használhatja a rake notes:fixme parancsot. Vegye figyelembe, hogy az annotáció nevét kisbetűvel kell írnia.

Egyéni megjegyzéseket is használhat a kódjában, és a rake notes:custom segítségével listázhatja őket, ha az ANNOTATION környezeti változóval adja meg a megjegyzést.

$ rake notes:custom ANNOTATION=BUG(in /home/foobar/commandsapp)app/model/post.rb: * Have to fix this one before pushing!

A specifikus és egyéni megjegyzések használatakor az annotáció neve (FIXME, BUG stb.) nem jelenik meg a kimeneti sorokban.

2. A kimeneti sorokban nem jelenik meg a megjegyzés neve (FIXME, BUG stb.).6 routes

A Rails routes listázza az összes definiált útvonalat, ami hasznos az alkalmazásban felmerülő útválasztási problémák felkutatásához, vagy jó áttekintést ad egy olyan alkalmazás URL-jeiről, amellyel próbálsz megismerkedni.

2.7 test

A Rails-ben végzett egységtesztelésről jó leírás található az A Guide to Testing Rails Applications

A Rails egy Test::Unit nevű tesztcsomaggal rendelkezik. A Rails a stabilitását a tesztek használatának köszönheti. A test: névtérben elérhető feladatok segítenek a különböző, remélhetőleg megírandó tesztek futtatásában.

2.8 tmp

A Rails.root/tmp könyvtár a *nix /tmp könyvtárhoz hasonlóan az ideiglenes fájlok, például a munkamenetek (ha fájltárolót használunk a fájlok tárolására), a folyamatazonosító fájlok és a gyorsítótárazott műveletek tárolására szolgál.

A tmp: névtérbe tartozó feladatok segítenek a Rails.root/tmp könyvtár kiürítésében:

2.9 Egyéb

  • A rake stats remekül használható a kódod statisztikáinak megtekintéséhez, olyan dolgokat jelenít meg, mint a KLOC (több ezer sornyi kód) és a kód-teszt arány.
  • A rake secret egy pszeudo-véletlenszerű kulcsot ad, amit a munkamenet-titkodhoz használhatsz.
  • rake time:zones:all felsorolja az összes időzónát, amiről a Rails tud.

3 A Rails haladó parancssor

A parancssor haladóbb használata arra összpontosít, hogy hasznos (néha akár meglepő) opciókat találjunk a segédprogramokban, és ezeket az igényeinkhez és az adott munkafolyamathoz igazítsuk. Az alábbiakban felsorolunk néhány trükköt a Rails ingujjában.

3.1 Rails adatbázisokkal és SCM-mel

Az új Rails-alkalmazás létrehozásakor lehetőségünk van megadni, hogy milyen adatbázist és milyen forráskódkezelő rendszert használjon az alkalmazásunk. Ezzel megspórolhatunk néhány percet, és minden bizonnyal sok billentyűleütést.

Lássuk, mit tesz nekünk a –git opció és a –database=postgresql opció:

El kellett hoznunk a gitapp könyvtárat és inicializálnunk egy üres git-tárat, mielőtt a Rails hozzáadná az általa létrehozott fájlokat a tárunkhoz. Lássuk, mit tett az adatbázis-konfigurációnkba:

Az adatbázis.yml konfigurációnkban is generált néhány sort, amelyek megfelelnek annak, hogy PostgreSQL-t választottunk adatbázisnak.

Az egyetlen bökkenő az SCM opciók használatában az, hogy először létre kell hoznunk az alkalmazásunk könyvtárát, majd inicializálni kell az SCM-et, és csak ezután futtathatjuk a rails new parancsot, hogy létrehozzuk az alkalmazásunk alapját.

3.2 szerver különböző backendekkel

Sok ember készített Ruby-ban számos különböző webszervereket, és sok közülük használható a Rails futtatására. A 2.3-as verzió óta a Rails a Racket használja a weboldalak kiszolgálására, ami azt jelenti, hogy bármilyen webszerver használható, amely megvalósít egy Rack kezelőt. Ide tartozik a WEBrick, a Mongrel, a Thin és a Phusion Passenger (hogy csak néhányat említsünk!).

A Rack integrációval kapcsolatos további részletekért lásd: Rails on Rack.

Egy másik szerver használatához csak telepítsd a gemjét, majd használd a nevét a rails server első paramétereként:

Feedback

Bátorítjuk, hogy segítsen javítani az útmutató minőségét.

Ha olyan elírást vagy tárgyi hibát látsz, amit bátran javíthatsz, kérjük, klónozd a rails repository-t és nyiss egy új pull requestet. Kérhetsz commit jogokat is a docrails-en, ha több javítást tervezel benyújtani. A commitokat felülvizsgáljuk, de ez azután történik, hogy elküldted a hozzájárulásodat. Ez a repository rendszeresen összevonásra kerül a masterrel.

Találhatsz hiányos tartalmat is, vagy olyan dolgokat, amelyek nem naprakészek. Kérjük, minden hiányzó dokumentációt adj hozzá a masterhez. A stílusra és a konvenciókra vonatkozóan ellenőrizd a Ruby on Rails útmutatókat.

Ha bármilyen okból kifolyólag észreveszel valami javítanivalót, de nem tudod magad javítani, kérlek, nyiss egy problémát.

És végül, de nem utolsó sorban, a rubyonrails-docs levelezési listán nagyon szívesen fogadunk mindenféle vitát a Ruby on Rails dokumentációval kapcsolatban.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.