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
- 1.1 rails new
- 1.2 rails server
- 1.3 rails generate
- 1.4 rails console
- 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. A kimeneti sorokban nem jelenik meg a megjegyzés neve (FIXME, BUG stb.).6 routes
- 2.7 test
- 2.8 tmp
- 2.9 Egyéb
- 3 A Rails haladó parancssor
- 3.1 Rails adatbázisokkal és SCM-mel
- 3.2 szerver különböző backendekkel
- Feedback
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.