Denna handledning förutsätter att du har grundläggande kunskaper om Rails efter att ha läst guiden Kom igång med Rails.
Denna handledning är baserad på Rails 3.0. En del av den kod som visas här kommer inte att fungera i tidigare versioner av Rails.
- 1 Command Line Basics
- 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.6 routes
- 2.7 test
- 2.8 tmp
- 2.9 Övrigt
- 3 Rails avancerade kommandorad
- 3.1 Rails med databaser och SCM
- 3.2 server med olika baksidor
- Feedback
1 Command Line Basics
Det finns några få kommandon som är helt avgörande för din dagliga användning av Rails. I ordningen efter hur mycket du förmodligen kommer att använda dem är följande:
- rails console
- rails server
- rake
- rails generate
- rails dbconsole
- rails new app_name
Låtsas vi skapa en enkel Rails-applikation för att gå igenom var och en av dessa kommandon i sitt sammanhang.
1.1 rails new
Det första vi vill göra är att skapa en ny Rails-applikation genom att köra kommandot rails new efter att ha installerat Rails.
Du kan installera rails gem genom att skriva gem install rails, om du inte redan har det. Följ instruktionerna i 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
Rails ställer in dig med vad som verkar vara en enorm mängd saker för ett så litet kommando! Du har nu hela Rails katalogstruktur med all den kod du behöver för att köra vår enkla applikation direkt ur lådan.
1.2 rails server
Kommandot rails server startar en liten webbserver vid namn WEBrick som levereras tillsammans med Ruby. Du kommer att använda detta varje gång du vill komma åt din applikation via en webbläsare.
WEBrick är inte ditt enda alternativ för att servera Rails. Vi kommer att ta upp det senare.
Och utan ytterligare arbete kommer rails server att köra vår nya, skinande Rails-app:
Med bara tre kommandon fick vi fram en Rails-server som lyssnar på port 3000. Gå till din webbläsare och öppna http://localhost:3000, du kommer att se en grundläggande Rails-app som körs.
Du kan också använda aliaset ”s” för att starta servern: rails s.
Servern kan köras på en annan port med alternativet -p. Standardutvecklingsmiljön kan ändras med hjälp av -e.
$ rails server -e production -p 4000
Valet -b binder Rails till den angivna ip:n, som standard är den 0.0.0.0.0. Du kan köra en server som en daemon genom att skicka ett -d-alternativ.
1.3 rails generate
Kommandot rails generate använder mallar för att skapa en hel massa saker. Om du kör rails generate i sig själv får du en lista över tillgängliga generatorer:
Du kan också använda aliaset ”g” för att anropa generatorkommandot: rails g.
Du kan installera fler generatorer genom generator gems, delar av insticksprogram som du utan tvekan kommer att installera, och du kan till och med skapa dina egna!
Användning av generatorer sparar dig en stor mängd tid genom att skriva boilerplate-kod, kod som är nödvändig för att appen ska fungera.
Låt oss göra vår egen controller med controllergeneratorn. Men vilket kommando ska vi använda? Vi frågar generatorn:
Alla Rails konsolverktyg har hjälptext. Som med de flesta *nix-verktyg kan du försöka lägga till –help eller -h i slutet, till exempel rails server –help.
Controllergeneratorn förväntar sig parametrar i form av generate controller controller ControllerName action1 action2. Låt oss skapa en Greetings-kontroller med en action av hello, som kommer att säga något trevligt till oss.
$ 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
Vad genererade detta? Den såg till att det fanns ett gäng kataloger i vår applikation och skapade en kontrollantfil, en vyfil, en funktionstestfil, en hjälpreda för vyn, en javascriptfil och en stylesheetfil.
Kontrollera kontrollanten och ändra den lite (i app/controllers/greetings_controller.rb):
class GreetingsController < ApplicationController def hello @message = "Hello, how are you today?" endend
Därefter vyn, för att visa vårt meddelande (i app/views/greetings/hello.html.erb):
<h1>A Greeting for You!</h1><p><%= @message %></p>
Starta upp din server med rails server.
$ rails server=> Booting WEBrick...
Säkerställ att du inte har några ”tilde backup”-filer i app/views/(controller), annars kommer WEBrick inte att visa det förväntade resultatet. Detta verkar vara ett fel i Rails 2.3.0.
URL:n blir http://localhost:3000/greetings/hello.
Rails kommer med en generator för datamodeller också.
För en lista över tillgängliga fälttyper hänvisas till API-dokumentationen för column-metoden för TableDefinition-klassen.
Men istället för att generera en modell direkt (vilket vi kommer att göra senare), ska vi sätta upp en ställning. En scaffold i Rails är en komplett uppsättning av modell, databasmigrering för den modellen, controller för att manipulera den, vyer för att visa och manipulera data och en testföljd för var och en av ovanstående.
Vi kommer att sätta upp en enkel resurs som heter ”HighScore” och som kommer att hålla reda på våra högsta poäng i de videospel vi spelar.
Generatorn kontrollerar att det finns kataloger för modeller, kontrollanter, hjälpmedel, layouter, funktionella tester och enhetstester, formatmallar, skapar vyer, kontrollant, modell och databasmigrering för HighScore (skapar tabellen och fälten high_scores), tar hand om rutten för resursen och nya tester för allt.
Migreringen kräver att vi migrerar, det vill säga kör lite Ruby-kod (som bor i den 20100209025147_create_high_scores.rb) för att ändra schemat i vår databas. Vilken databas? Den sqlite3-databas som Rails kommer att skapa åt dig när vi kör kommandot rake db:migrate. Vi kommer att prata mer om Rake på djupet om en liten stund.
Vi ska prata om enhetstester. Enhetstester är kod som testar och gör påståenden om kod. I enhetstester tar vi en liten del av koden, till exempel en metod i en modell, och testar dess in- och utgångar. Enhetstester är din vän. Ju förr du gör upp med det faktum att din livskvalitet kommer att öka drastiskt när du enhetstestar din kod, desto bättre. Allvarligt talat. Vi kommer att göra ett om en stund.
Låt oss se gränssnittet som Rails skapat åt oss.
$ rails server
Gå till din webbläsare och öppna http://localhost:3000/high_scores, nu kan vi skapa nya högpoäng (55 160 på Space Invaders!)
1.4 rails console
Med konsolkommandot kan du interagera med ditt Rails-program från kommandoraden. På undersidan använder rails console IRB, så om du någonsin har använt det kommer du att känna dig som hemma. Detta är användbart för att testa snabba idéer med kod och ändra data på serversidan utan att röra webbplatsen.
Du kan också använda aliaset ”c” för att anropa konsolen: rails c.
Om du vill testa lite kod utan att ändra några data kan du göra det genom att anropa 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 tar reda på vilken databas du använder och släpper dig in i vilket kommandoradsgränssnitt du än skulle använda med den (och tar reda på vilka kommandoradsparametrar du ska ge till den också!). Den stöder MySQL, PostgreSQL, SQLite och SQLite3.
Du kan också använda aliaset ”db” för att anropa dbconsole: rails db.
1.6 rails plugin
Rails plugin-kommandot förenklar hantering av plugin. Plugins kan installeras med hjälp av namn eller deras URL:er till förvaringsutrymmen. Du måste ha Git installerat om du vill installera ett insticksprogram från ett Git-repo. Samma sak gäller även för Subversion.
$ rails plugin install https://github.com/technoweenie/acts_as_paranoid.git+ ./CHANGELOG+ ./MIT-LICENSE......
1.7 rails runner
runner kör Ruby-kod i kontexten för Rails icke-interaktivt. Till exempel:
$ rails runner "Model.long_running_method"
Du kan också använda aliaset ”r” för att anropa runner: rails r.
Du kan ange den miljö som runner-kommandot ska verka i med hjälp av växeln -e.
$ rails runner -e staging "Model.long_running_method"
1.8 rails destroy
Tänk på destroy som motsatsen till generate. Det tar reda på vad generate gjorde och ångrar det.
Du kan också använda aliaset ”d” för att anropa destroy-kommandot: rails d.
2 Rake
Rake är Ruby Make, ett fristående Ruby-verktyg som ersätter Unix-verktyget ”make”, och som använder en ”Rakefile” och .rake-filer för att bygga upp en lista med uppgifter. I Rails används Rake för vanliga administrationsuppgifter, särskilt sofistikerade uppgifter som bygger på varandra.
Du kan få en lista över de Rake-uppgifter som är tillgängliga för dig, som ofta beror på din aktuella katalog, genom att skriva rake –tasks. Varje uppgift har en beskrivning och bör hjälpa dig att hitta det du behöver.
$ 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 ger information om versionsnummer för Ruby, RubyGems, Rails, Rails underkomponenter, din applikations mapp, det aktuella Rails-miljönamnet, din applikations databasadapter och schemaversion. Det är användbart när du behöver be om hjälp, kontrollera om en säkerhetspatch kan påverka dig eller när du behöver lite statistik för en befintlig Rails-installation.
2.2 assets
Du kan förkompilera tillgångarna i app/assets med hjälp av rake assets:precompile och ta bort de kompilerade tillgångarna med hjälp av rake assets:clean.
2.3 db
De vanligaste uppgifterna för db: Rake namespace är migrate och create, och det lönar sig att prova alla rake-uppgifterna för migrering (up, down, redo, reset). rake db:version är användbart vid felsökning och talar om den aktuella versionen av databasen.
Mer information om migreringar finns i Migrationsguiden.
2.4 doc
Namnsutrymmet doc: har verktygen för att skapa dokumentation för din app, API-dokumentation och guider. Dokumentationen kan också tas bort vilket främst är användbart för att banta din kodbas, till exempel om du skriver en Rails-applikation för en inbäddad plattform.
- rake doc:app genererar dokumentation för din applikation i doc/app.
- rake doc:guides genererar Rails-guider i doc/guides.
- rake doc:rails genererar API-dokumentation för Rails i doc/api.
- rake doc:plugins genererar API-dokumentation för alla plugins som är installerade i programmet i doc/plugins.
- rake doc:clobber_plugins tar bort den genererade dokumentationen för alla plugins.
2.5 notes
rake notes söker igenom din kod efter kommentarer som börjar med FIXME, OPTIMIZE eller TODO. Sökningen görs i filer med tillägget .builder, .rb, .erb, .haml och .slim för både standard- och anpassade anteckningar.
Om du letar efter en specifik anteckning, till exempel FIXME, kan du använda rake notes:fixme. Observera att du måste skriva annotationens namn med små bokstäver.
Du kan också använda anpassade annotationer i din kod och lista dem med hjälp av rake notes:custom genom att ange annotationen med hjälp av miljövariabeln ANNOTATION.
$ rake notes:custom ANNOTATION=BUG(in /home/foobar/commandsapp)app/model/post.rb: * Have to fix this one before pushing!
När du använder specifika annotationer och anpassade annotationer visas inte annotationsnamnet (FIXME, BUG etc.) på utdataraderna.
2.6 routes
Rake routes listar alla dina definierade rutter, vilket är användbart för att spåra routingproblem i din app, eller för att ge dig en bra överblick över URL:erna i en app som du försöker bekanta dig med.
2.7 test
En bra beskrivning av enhetstestning i Rails ges i A Guide to Testing Rails Applications
Rails levereras med en testföljd som heter Test::Unit. Rails har sin stabilitet att tacka för användningen av tester. De uppgifter som finns tillgängliga i namnområdet test: hjälper till att köra de olika tester som du förhoppningsvis kommer att skriva.
2.8 tmp
The Rails.root/tmp-katalogen är, i likhet med *nix /tmp-katalogen, en plats för tillfälliga filer som sessioner (om du använder ett filarkiv för filer), processidentifikationsfiler och cachade åtgärder.
Namensutrymmet tmp: hjälper dig att rensa Rails.root/tmp-katalogen:
2.9 Övrigt
- rake stats är bra för att titta på statistik om din kod och visa saker som KLOC (tusentals rader kod) och förhållandet mellan kod och test.
- rake secret ger dig en pseudo slumpmässig nyckel som du kan använda för din sessionshemlighet.
- rake time:zones:all listar alla tidszoner som Rails känner till.
3 Rails avancerade kommandorad
Mer avancerad användning av kommandoraden fokuserar på att hitta användbara (ibland till och med överraskande) alternativ i verktygen, och att anpassa dessa till dina behov och specifika arbetsflöden. Här listas några knep i Rails ärm.
3.1 Rails med databaser och SCM
När du skapar en ny Rails-applikation har du möjlighet att ange vilken typ av databas och vilken typ av källkodshanteringssystem din applikation ska använda. Detta kommer att spara dig några minuter och säkert många tangenttryckningar.
Låt oss se vad ett –git-alternativ och ett –database=postgresql-alternativ kommer att göra för oss:
Vi var tvungna att skapa gitapp-katalogen och initiera ett tomt git-repositorium innan Rails skulle lägga till filer som skapats till vårt repositorium. Låt oss se vad den lade in i vår databaskonfiguration:
Den genererade också några rader i vår database.yml-konfiguration som motsvarar vårt val av PostgreSQL som databas.
Den enda haken med att använda SCM-alternativen är att du måste skapa din applikations katalog först, sedan initiera din SCM, sedan kan du köra kommandot rails new för att generera basen för din applikation.
3.2 server med olika baksidor
Många människor har skapat ett stort antal olika webbservrar i Ruby, och många av dem kan användas för att köra Rails. Sedan version 2.3 använder Rails Rack för att servera sina webbsidor, vilket innebär att vilken webbserver som helst som implementerar en Rack-hanterare kan användas. Detta inkluderar WEBrick, Mongrel, Thin och Phusion Passenger (för att nämna några!).
För mer information om Rack-integrationen, se Rails on Rack.
Om du vill använda en annan server installerar du bara dess gem och använder sedan dess namn som den första parametern i rails server:
Feedback
Du uppmuntras att hjälpa till med att förbättra kvaliteten på den här guiden.
Om du ser några stavfel eller faktafel som du är säker på att kunna lappa, klona rails-förrådet och öppna en ny pull request. Du kan också be om commit-rättigheter på docrails om du planerar att skicka in flera patchar. Commits granskas, men det sker efter att du har skickat in ditt bidrag. Det här arkivet korsfusioneras med master med jämna mellanrum.
Du kan också hitta ofullständigt innehåll eller saker som inte är uppdaterade. Lägg gärna till all dokumentation som saknas för master. Kontrollera Ruby on Rails Guides Guidelines för stil och konventioner.
Om du av någon anledning upptäcker något som ska åtgärdas men inte kan åtgärda det själv, vänligen öppna ett problem.
Sist men inte minst är alla typer av diskussioner om Ruby on Rails-dokumentation mycket välkomna på sändlistan rubyonrails-docs.