Denne vejledning forudsætter, at du har grundlæggende Rails-kendskab efter at have læst Getting Started with Rails Guide.
Denne vejledning er baseret på Rails 3.0. Noget af den kode, der vises her, vil ikke fungere i tidligere versioner af Rails.
- 1 Kommandolinjens grundprincipper
- 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 En god beskrivelse af enhedstest i Rails findes i A Guide to Testing Rails Applications
- 2.8 tmp
- 2.9 Diverse
- 3 Den avancerede Rails-kommandolinje
- 3.1 Rails med databaser og SCM
- 3.2 server med forskellige backends
- Feedback
1 Kommandolinjens grundprincipper
Der er nogle få kommandoer, der er helt afgørende for din daglige brug af Rails. I rækkefølge efter hvor meget du sandsynligvis vil bruge dem er:
- rails console
- rails server
- rake
- rails generate
- rails dbconsole
- rails new app_name
Lad os oprette en simpel Rails-applikation for at gennemgå hver af disse kommandoer i en sammenhæng.
1.1 rails new
Det første, vi vil gøre, er at oprette en ny Rails-applikation ved at køre kommandoen rails new efter installation af Rails.
Du kan installere rails-gem’en ved at skrive gem install rails, hvis du ikke allerede har den. Følg instruktionerne 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 vil sætte dig op med, hvad der virker som en enorm mængde ting for sådan en lille kommando! Du har nu hele Rails-mappestrukturen med al den kode, du har brug for til at køre vores simple applikation lige ud af boksen.
1.2 rails server
Kommandoen rails server starter en lille webserver ved navn WEBrick, som leveres sammen med Ruby. Du skal bruge den, hver gang du vil have adgang til din applikation via en webbrowser.
WEBrick er ikke din eneste mulighed for at servere Rails. Det kommer vi ind på senere.
Med ingen yderligere arbejde vil rails-serveren køre vores nye skinnende Rails-app:
Med blot tre kommandoer fik vi pisket en Rails-server op, der lytter på port 3000. Gå til din browser og åbn http://localhost:3000, så vil du se en grundlæggende Rails-app køre.
Du kan også bruge aliaset “s” til at starte serveren: rails s.
Serveren kan køres på en anden port ved hjælp af -p-indstillingen. Standardudviklingsmiljøet kan ændres ved hjælp af -e.
$ rails server -e production -p 4000
Optionen -b binder Rails til den angivne ip, som standard er den 0.0.0.0.0.0. Du kan køre en server som en dæmon ved at angive en -d-indstilling.
1.3 rails generate
Kommandoen rails generate bruger skabeloner til at oprette en hel masse ting. Hvis du kører rails generate i sig selv, får du en liste over tilgængelige generatorer:
Du kan også bruge aliaset “g” til at kalde generatorkommandoen: rails g.
Du kan installere flere generatorer gennem generator-gems, dele af plugins, som du utvivlsomt vil installere, og du kan endda oprette dine egne!
Ved brug af generatorer sparer du en stor mængde tid ved at skrive boilerplate-kode, kode, der er nødvendig for, at appen fungerer.
Lad os lave vores egen controller med controller-generatoren. Men hvilken kommando skal vi bruge? Lad os spørge generatoren:
Alle Rails-konsolværktøjerne har hjælpetekst. Som med de fleste *nix-værktøjer kan du prøve at tilføje –help eller -h til sidst, for eksempel rails server –help.
Controllergeneratoren forventer parametre i form af generate controller controller ControllerName action1 action2. Lad os lave en Greetings-controller med en action af hello, som vil sige noget pænt til os.
$ 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
Hvad genererede dette alt sammen? Den sørgede for, at der var en masse mapper i vores program, og oprettede en controllerfil, en visningsfil, en funktionel testfil, en hjælper til visningen, en javascript-fil og en stylesheet-fil.
Tjek controlleren ud, og modificer den lidt (i app/controllers/greetings_controller.rb):
class GreetingsController < ApplicationController def hello @message = "Hello, how are you today?" endend
Dernæst visningen, der skal vise vores besked (i app/views/greetings/hello.html.erb):
<h1>A Greeting for You!</h1><p><%= @message %></p>
Sæt din server i gang ved hjælp af rails server.
$ rails server=> Booting WEBrick...
Sørg for, at du ikke har nogen “tilde backup”-filer i app/views/(controller), ellers vil WEBrick ikke vise det forventede output. Dette synes at være en fejl i Rails 2.3.0.
Den URL vil være http://localhost:3000/greetings/hello.
Rails kommer også med en generator til datamodeller.
For en liste over tilgængelige felttyper henvises til API-dokumentationen for column-metoden for TableDefinition-klassen.
Men i stedet for at generere en model direkte (hvilket vi skal gøre senere), skal vi opstille et stillads. Et stillads i Rails er et komplet sæt af model, databasemigration for denne model, controller til at manipulere den, visninger til at se og manipulere dataene og en testsuite for hver af de ovennævnte.
Vi vil oprette en simpel ressource kaldet “HighScore”, som vil holde styr på vores højeste score i de videospil, vi spiller.
Generatoren kontrollerer, at der findes mapper for modeller, controllere, hjælpere, layouts, funktionelle og enhedstests, stylesheets, opretter visninger, controller, model og databasemigrering for HighScore (opretter tabellen high_scores og felter), tager sig af ruten for ressourcen og nye tests for alt.
Migreringen kræver, at vi migrerer, dvs. kører noget Ruby-kode (der bor i at 20100209025147_create_high_scores.rb) for at ændre skemaet i vores database. Hvilken database? Den sqlite3-database, som Rails vil oprette for dig, når vi kører kommandoen rake db:migrate. Vi taler mere om Rake i dybden om lidt.
Lad os tale om enhedstests. Enhedstests er kode, der tester og fremsætter påstande om kode. I enhedstest tager vi en lille del af koden, f.eks. en metode i en model, og tester dens ind- og uddata. Unit tests er din ven. Jo før du slutter fred med det faktum, at din livskvalitet vil stige drastisk, når du unit tester din kode, jo bedre. Seriøst. Vi laver en om lidt.
Lad os se den grænseflade, som Rails har skabt til os.
$ rails server
Gå til din browser og åbn http://localhost:3000/high_scores, nu kan vi oprette nye high scores (55.160 på Space Invaders!)
1.4 rails console
Med kommandoen console kan du interagere med din Rails-applikation fra kommandolinjen. På undersiden bruger rails console IRB, så hvis du nogensinde har brugt den, vil du føle dig hjemme. Det er nyttigt til at afprøve hurtige idéer med kode og ændre data server-side uden at røre ved webstedet.
Du kan også bruge aliaset “c” til at påkalde konsollen: rails c.
Hvis du ønsker at afprøve noget kode uden at ændre data, kan du gøre det ved at påkalde 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 finder ud af, hvilken database du bruger, og sætter dig ind i den kommandolinjegrænseflade, du ville bruge med den (og finder også ud af, hvilke kommandolinjeparametre du skal give den!). Den understøtter MySQL, PostgreSQL, SQLite og SQLite3.
Du kan også bruge aliaset “db” til at kalde dbconsole: rails db.
1.6 rails plugin
Den rails plugin-kommando forenkler plugin-håndteringen. Plugins kan installeres efter navn eller efter deres repository-URL’er. Du skal have Git installeret, hvis du vil installere et plugin fra et Git-repo. Det samme gælder også for Subversion.
$ rails plugin install https://github.com/technoweenie/acts_as_paranoid.git+ ./CHANGELOG+ ./MIT-LICENSE......
1.7 rails runner
runner kører Ruby-kode i kontekst af Rails ikke-interaktivt. For eksempel:
$ rails runner "Model.long_running_method"
Du kan også bruge aliaset “r” til at kalde runner: rails r.
Du kan angive det miljø, som runner-kommandoen skal operere i, ved hjælp af kontakten -e.
$ rails runner -e staging "Model.long_running_method"
1.8 rails destroy
Tænk på destroy som det modsatte af generate. Den finder ud af, hvad generate gjorde, og fortryder det.
Du kan også bruge aliaset “d” til at kalde destroy-kommandoen: rails d.
2 Rake
Rake er Ruby Make, et selvstændigt Ruby-hjælpeprogram, der erstatter Unix-hjælpeprogrammet ‘make’, og bruger en ‘Rakefile’ og .rake-filer til at opbygge en liste over opgaver. I Rails bruges Rake til almindelige administrationsopgaver, især sofistikerede opgaver, der bygger på hinanden.
Du kan få en liste over de Rake-opgaver, der er tilgængelige for dig, som ofte vil afhænge af din aktuelle mappe, ved at skrive rake –tasks. Hver opgave har en beskrivelse og bør hjælpe dig med at finde det, du har brug for.
$ 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 giver oplysninger om versionsnumre for Ruby, RubyGems, Rails, Rails-underkomponenterne, din applikations mappe, det aktuelle Rails-miljønavn, din applikations databaseadapter og skemaversionen. Det er nyttigt, når du skal bede om hjælp, kontrollere, om en sikkerhedspatch kan påvirke dig, eller når du har brug for nogle statistikker for en eksisterende Rails-installation.
2.2 assets
Du kan prækompilere assets i app/assets ved hjælp af rake assets:precompile og fjerne de kompilerede assets ved hjælp af rake assets:clean.
2.3 db
De mest almindelige opgaver for db: Rake namespace er migrate og create, og det kan betale sig at afprøve alle rake-migrationsopgaverne (up, down, redo, reset). rake db:version er nyttig ved fejlfinding og fortæller dig den aktuelle version af databasen.
Mere oplysninger om migreringer findes i vejledningen Migrations.
2.4 doc
Navnsrummet doc: indeholder værktøjer til at generere dokumentation til din app, API-dokumentation, vejledninger. Dokumentation kan også strippes, hvilket primært er nyttigt til at slanke din kodebase, f.eks. hvis du skriver en Rails-applikation til en indlejret platform.
- rake doc:app genererer dokumentation for din applikation i doc/app.
- rake doc:guides genererer Rails-guides i doc/guides.
- rake doc:rails genererer API-dokumentation for Rails i doc/api.
- rake doc:plugins genererer API-dokumentation for alle de plugins, der er installeret i programmet, i doc/plugins.
- rake doc:clobber_plugins fjerner den genererede dokumentation for alle plugins.
2.5 notes
rake notes søger i din kode efter kommentarer, der begynder med FIXME, OPTIMIZE eller TODO. Søgningen foretages i filer med udvidelsen .builder, .rb, .erb, .erb, .haml og .slim for både standard- og brugerdefinerede annotationer.
Hvis du leder efter en specifik annotation, f.eks. FIXME, kan du bruge rake notes:fixme. Bemærk, at du skal skrive annotationens navn med små bogstaver.
Du kan også bruge brugerdefinerede annotationer i din kode og liste dem ved hjælp af rake notes:custom ved at angive annotationen ved hjælp af en miljøvariabel ANNOTATION.
$ rake notes:custom ANNOTATION=BUG(in /home/foobar/commandsapp)app/model/post.rb: * Have to fix this one before pushing!
Når du bruger specifikke annotationer og brugerdefinerede annotationer, vises annotationens navn (FIXME, BUG osv.) ikke i outputlinjerne.
2.6 routes
rake routes viser en liste over alle dine definerede routes, hvilket er nyttigt til at opspore routingproblemer i din app eller give dig et godt overblik over URL’erne i en app, som du forsøger at blive fortrolig med.
2.7 test
En god beskrivelse af enhedstest i Rails findes i A Guide to Testing Rails Applications
En god beskrivelse af enhedstest i Rails findes i A Guide to Testing Rails Applications
Rails leveres med en testsuite kaldet Test::Unit. Rails skylder sin stabilitet til brugen af tests. De opgaver, der er tilgængelige i test: namespace, hjælper med at køre de forskellige tests, som du forhåbentlig vil skrive.
2.8 tmp
Den Rails.root/tmp-mappen er ligesom *nix-mappen /tmp et opbevaringssted for midlertidige filer som sessioner (hvis du bruger et fillager til filer), proces-id-filer og handlinger i cachen.
Opgaverne i navnespacet tmp: hjælper dig med at rydde Rails.root/tmp-mappen:
2.9 Diverse
- rake stats er fantastisk til at se på statistik over din kode og viser ting som KLOC’er (tusindvis af linjer kode) og dit kode-til-test-forhold.
- rake secret giver dig en pseudo-tilfældig nøgle til brug for din sessionshemmelighed.
- rake time:zones:all viser alle de tidszoner, som Rails kender til.
3 Den avancerede Rails-kommandolinje
Mere avanceret brug af kommandolinjen er fokuseret på at finde nyttige (til tider endda overraskende) muligheder i hjælpeprogrammerne og tilpasse dem til dine behov og specifikke arbejdsgange. Her er listet nogle tricks i Rails’ ærme.
3.1 Rails med databaser og SCM
Når du opretter en ny Rails-applikation, har du mulighed for at angive, hvilken slags database og hvilken slags kildekodehåndteringssystem din applikation skal bruge. Dette vil spare dig nogle få minutter og helt sikkert mange tastetryk.
Lad os se, hvad en –git-indstilling og en –database=postgresql-indstilling vil gøre for os:
Vi var nødt til at oprette gitapp-mappen og initialisere et tomt git-repositorium, før Rails ville tilføje filer, som det oprettede, til vores repositorium. Lad os se, hvad den satte i vores databasekonfiguration:
Den genererede også nogle linjer i vores database.yml-konfiguration, der svarer til vores valg af PostgreSQL som database.
Den eneste hage ved at bruge SCM-indstillingerne er, at du først skal lave din applikations mappe og derefter initialisere din SCM, hvorefter du kan køre rails new-kommandoen for at generere grundlaget for din app.
3.2 server med forskellige backends
Mange mennesker har oprettet et stort antal forskellige webservere i Ruby, og mange af dem kan bruges til at køre Rails. Siden version 2.3 har Rails brugt Rack til at betjene sine websider, hvilket betyder, at enhver webserver, der implementerer en Rack-handler, kan bruges. Dette omfatter WEBrick, Mongrel, Thin og Phusion Passenger (for at nævne nogle få!).
For flere oplysninger om Rack-integrationen, se Rails on Rack.
For at bruge en anden server skal du blot installere dens gem og derefter bruge dens navn som første parameter til rails server:
Feedback
Du opfordres til at hjælpe med at forbedre kvaliteten af denne vejledning.
Hvis du ser nogen stavefejl eller faktuelle fejl, som du er sikker på at kunne patche, bedes du klone rails-repositoriet og åbne en ny pull request. Du kan også bede om commit-rettigheder på docrails, hvis du har planer om at indsende flere patches. Commits bliver gennemgået, men det sker, efter at du har indsendt dit bidrag. Dette repository krydssammenlægges med master med jævne mellemrum.
Du kan også finde ufuldstændigt indhold, eller ting, der ikke er opdaterede. Tilføj venligst al manglende dokumentation til master. Se retningslinjerne for Ruby on Rails Guides for stil og konventioner.
Hvis du af en eller anden grund finder noget, der skal rettes, men ikke selv kan lappe det, skal du åbne et problem.
Sidst, men ikke mindst, er enhver form for diskussion vedrørende Ruby on Rails-dokumentation meget velkommen på postlisten rubyonrails-docs.