Guides.rubyonrails.org

In deze handleiding wordt ervan uitgegaan dat je beschikt over basiskennis van Rails door het lezen van de handleiding Aan de slag met Rails.

Deze handleiding is gebaseerd op Rails 3.0. Sommige code die hier wordt getoond, werkt niet in eerdere versies van Rails.

1 Basisbeginselen opdrachtregel

Er zijn een paar opdrachten die absoluut essentieel zijn voor je dagelijkse gebruik van Rails. In de volgorde van hoe vaak je ze waarschijnlijk zult gebruiken zijn:

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

Laten we een eenvoudige Rails applicatie maken om door elk van deze commando’s in context te stappen.

1.1 rails new

Het eerste wat we willen doen is een nieuwe Rails applicatie maken door het commando rails new uit te voeren na de installatie van Rails.

Je kunt de rails gem installeren door gem install rails in te typen, als je die nog niet hebt. Volg de instructies in de 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 zal je voorzien van wat lijkt op een enorme hoeveelheid spullen voor zo’n klein commando! Je hebt nu de hele Rails directory structuur met alle code die je nodig hebt om onze eenvoudige applicatie direct uit de doos te draaien.

1.2 rails server

Het commando rails server start een kleine webserver genaamd WEBrick die met Ruby wordt meegeleverd. Je gebruikt dit elke keer als je je applicatie wilt benaderen via een webbrowser.

WEBrick is niet je enige optie voor het serveren van Rails. Daar komen we later op terug.

Met geen verder werk, zal de rails server onze nieuwe glimmende Rails app draaien:

Met slechts drie commando’s hebben we een Rails server in elkaar geflanst die luistert op poort 3000. Ga naar je browser en open http://localhost:3000, je zult een basis Rails app zien draaien.

Je kunt ook de alias “s” gebruiken om de server te starten: rails s.

De server kan op een andere poort worden gedraaid met de -p optie. De standaard ontwikkelomgeving kan worden veranderd met -e.

$ rails server -e production -p 4000

De -b optie bindt Rails aan het opgegeven ip, standaard is dit 0.0.0.0. Je kunt een server als daemon draaien door een -d optie mee te geven.

1.3 rails generate

Het rails generate commando gebruikt sjablonen om een heleboel dingen te maken. Het uitvoeren van rails generate op zichzelf geeft een lijst van beschikbare generators:

Je kunt ook de alias “g” gebruiken om het generator commando aan te roepen: rails g.

Je kunt meer generators installeren via generator gems, gedeeltes van plugins die je ongetwijfeld zult installeren, en je kunt er zelfs je eigen maken!

Het gebruik van generatoren bespaart je een grote hoeveelheid tijd door het schrijven van boilerplate-code, code die nodig is om de app te laten werken.

Laten we onze eigen controller maken met de controller-generator. Maar welk commando moeten we gebruiken? Laten we het aan de generator vragen:

Alle hulpprogramma’s voor de Rails-console hebben een helptekst. Zoals bij de meeste *nix-hulpprogramma’s kun je proberen –help of -h aan het eind toe te voegen, bijvoorbeeld rails server –help.

De controller-generator verwacht parameters in de vorm van generate controller ControllerName action1 action2. Laten we een Greetings controller maken met een actie van hello, die iets aardigs tegen ons zal zeggen.

$ 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

Wat heeft dit allemaal gegenereerd? Het zorgde ervoor dat er een heleboel mappen in onze applicatie stonden, en creëerde een controller-bestand, een view-bestand, een functioneel test-bestand, een helper voor de view, een javascript-bestand en een stylesheet-bestand.

Kijk naar de controller en pas deze een beetje aan (in app/controllers/greetings_controller.rb):

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

Dan de view, om ons bericht weer te geven (in app/views/greetings/hello.html.erb):

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

Start je server op met rails server.

$ rails server=> Booting WEBrick...

Zorg ervoor dat je geen “tilde back-up” bestanden hebt in app/views/(controller), anders zal WEBrick niet de verwachte output tonen. Dit lijkt een bug te zijn in Rails 2.3.0.

De URL wordt http://localhost:3000/greetings/hello.

Rails komt ook met een generator voor datamodellen.

Voor een lijst van beschikbare veldtypen, zie de API-documentatie voor de kolommethode voor de klasse TableDefinition.

Maar in plaats van direct een model te genereren (wat we later zullen doen), laten we een scaffold opzetten. Een scaffold in Rails is een volledige set van model, database migratie voor dat model, controller om het te manipuleren, views te bekijken en manipuleren van de gegevens, en een testsuite voor elk van de bovenstaande.

We zullen het opzetten van een eenvoudige bron genaamd “HighScore” dat zal bijhouden van onze hoogste score op video games die we spelen.

De generator controleert of er de directories voor modellen, controllers, helpers, layouts, functionele en unit tests, stylesheets bestaan, maakt de views, controller, model en database migratie voor HighScore (het maken van de high_scores tabel en velden), zorgt voor de route voor de resource, en nieuwe tests voor alles.

De migratie vereist dat we migreren, dat wil zeggen, wat Ruby code uitvoeren (levend in die 20100209025147_create_high_scores.rb) om het schema van onze database te wijzigen. Welke database? De sqlite3 database die Rails voor je zal maken wanneer we het rake db:migrate commando uitvoeren. We zullen het zo meteen uitgebreid over Rake hebben.

Laten we het eens hebben over unit tests. Eenheidstests zijn codes die code testen en beweringen doen over code. Bij unit tests nemen we een klein deel van de code, bijvoorbeeld een methode van een model, en testen we de invoer en uitvoer ervan. Unit tests zijn je vriend. Hoe eerder je vrede hebt met het feit dat je levenskwaliteit drastisch zal toenemen als je je code unit test, hoe beter. Serieus. We maken er zo een.

Laten we eens kijken naar de interface die Rails voor ons heeft gemaakt.

$ rails server

Ga naar je browser en open http://localhost:3000/high_scores, nu kunnen we nieuwe highscores maken (55.160 op Space Invaders!)

1.4 rails console

Met het console commando kun je vanaf de commandoregel interactief met je Rails applicatie werken. Aan de onderkant maakt rails console gebruik van IRB, dus als je dat ooit hebt gebruikt, zit je hier goed. Dit is handig voor het uittesten van snelle ideeen met code en het veranderen van gegevens server-side zonder de website aan te raken.

Je kunt ook de alias “c” gebruiken om de console aan te roepen: rails c.

Als je wat code wilt uittesten zonder gegevens te veranderen, kun je dat doen door rails console –sandbox aan te roepen.

$ 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 zoekt uit welke database je gebruikt en plaatst je in de command line interface die je ermee zou gebruiken (en zoekt ook uit welke command line parameters je eraan moet geven!). Het ondersteunt MySQL, PostgreSQL, SQLite en SQLite3.

Je kunt ook de alias “db” gebruiken om de dbconsole aan te roepen: rails db.

1.6 rails plugin

Het rails plugin commando vereenvoudigt het plugin beheer. Plugins kunnen geïnstalleerd worden op naam of op de URL van hun repository. Je moet Git geïnstalleerd hebben als je een plugin van een Git repo wilt installeren. Hetzelfde geldt ook voor Subversion.

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

1.7 rails runner

runner voert Ruby code uit in de context van Rails op niet-interactieve wijze. Bijvoorbeeld:

$ rails runner "Model.long_running_method"

U kunt ook de alias “r” gebruiken om de runner aan te roepen: rails r.

U kunt de omgeving specificeren waarin het runner commando moet werken met de -e switch.

$ rails runner -e staging "Model.long_running_method"

1.8 rails destroy

Denk aan destroy als het tegenovergestelde van generate. Het zal uitzoeken wat generate deed, en het ongedaan maken.

Je kunt ook de alias “d” gebruiken om het destroy commando aan te roepen: rails d.

2 Rake

Rake is Ruby Make, een standalone Ruby hulpprogramma dat het Unix hulpprogramma ‘make’ vervangt, en gebruik maakt van een ‘Rakefile’ en .rake bestanden om een lijst van taken op te bouwen. In Rails wordt Rake gebruikt voor veelvoorkomende beheertaken, vooral geavanceerde taken die op elkaar voortbouwen.

Je kunt een lijst van Rake taken krijgen, die vaak afhangt van je huidige directory, door rake –tasks te typen. Elke taak heeft een beschrijving, en zou je moeten helpen om datgene te vinden wat je nodig hebt.

$ 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 geeft informatie over versienummers voor Ruby, RubyGems, Rails, de Rails subcomponenten, je applicatie’s map, de huidige Rails omgevingsnaam, je app’s database adapter, en schema versie. Het is handig wanneer je om hulp moet vragen, moet controleren of een beveiligingspatch van invloed is, of wanneer je wat statistieken nodig hebt voor een bestaande Rails installatie.

2.2 assets

Je kunt de assets in app/assets voorcompileren met rake assets:precompile en die gecompileerde assets verwijderen met rake assets:clean.

2.3 db

De meest voorkomende taken van de db: Rake namespace zijn migrate en create, en het zal lonen om alle migratie rake taken uit te proberen (up, down, redo, reset). rake db:version is handig bij troubleshooting, het vertelt je de huidige versie van de database.

Meer informatie over migraties is te vinden in de Migrations guide.

2.4 doc

De doc: namespace heeft de tools om documentatie te genereren voor je app, API documentatie, gidsen. Documentatie kan ook worden gestript, wat vooral handig is voor het afslanken van je codebase, zoals wanneer je een Rails applicatie schrijft voor een embedded platform.

  • rake doc:app genereert documentatie voor je applicatie in doc/app.
  • rake doc:guides genereert Rails gidsen in doc/guides.
  • rake doc:rails genereert API-documentatie voor Rails in doc/api.
  • rake doc:plugins genereert API-documentatie voor alle plugins die in de applicatie zijn geïnstalleerd in doc/plugins.
  • rake doc:clobber_plugins verwijdert de gegenereerde documentatie voor alle plugins.

2.5 notes

rake notes doorzoekt je code op commentaar dat begint met FIXME, OPTIMIZE of TODO. Het zoeken wordt gedaan in bestanden met extensie .builder, .rb, .erb, .haml en .slim voor zowel standaard als aangepaste annotaties.

Als je op zoek bent naar een specifieke annotatie, bijvoorbeeld FIXME, dan kun je rake notes:fixme gebruiken. Merk op dat u de naam van de annotatie in kleine letters moet weergeven.

U kunt ook aangepaste annotaties in uw code gebruiken en deze weergeven met rake notes:custom door de annotatie op te geven met een omgevingsvariabele ANNOTATION.

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

Wanneer u specifieke annotaties en aangepaste annotaties gebruikt, wordt de naam van de annotatie (FIXME, BUG enz.) niet weergegeven in de uitvoerregels.

2.6 routes

rake routes geeft een lijst van al je gedefinieerde routes, wat handig is voor het opsporen van routeringsproblemen in je app, of om je een goed overzicht te geven van de URL’s in een app waarmee je vertrouwd probeert te raken.

2.7 test

Een goede beschrijving van unit testing in Rails wordt gegeven in A Guide to Testing Rails Applications

Rails wordt geleverd met een testsuite genaamd Test::Unit. Rails dankt zijn stabiliteit aan het gebruik van tests. De taken die beschikbaar zijn in de test: namespace helpen bij het uitvoeren van de verschillende tests die je hopelijk zult schrijven.

2.8 tmp

De Rails.root/tmp directory is, net als de *nix /tmp directory, de holding plaats voor tijdelijke bestanden zoals sessies (als je met behulp van een file store voor bestanden), proces-id bestanden, en cache actions.

De tmp: namespaced taken zal u helpen het opruimen van de Rails.root/tmp directory:

2.9 Diversen

  • rake stats is geweldig voor het bekijken van statistieken over je code, het weergeven van dingen zoals KLOCs (duizenden regels code) en uw code om te testen ratio.
  • rake secret geeft je een pseudo-willekeurige sleutel om te gebruiken voor uw sessie geheim.
  • rake time:zones:all geeft een lijst van alle tijdzones die Rails kent.

3 De Rails Advanced Command Line

Meer geavanceerd gebruik van de command line is gericht op het vinden van nuttige (soms zelfs verrassende) opties in de hulpprogramma’s, en deze aan te passen aan je behoeften en specifieke werkstroom. Hier zijn een aantal trucs in de mouw van Rails.

3.1 Rails met Databases en SCM

Wanneer je een nieuwe Rails applicatie maakt, heb je de mogelijkheid om aan te geven wat voor soort database en wat voor soort broncode management systeem je applicatie gaat gebruiken. Dit bespaart je een paar minuten, en zeker veel toetsaanslagen.

Laten we eens kijken wat een –git optie en een –database=postgresql optie voor ons zal doen:

We moesten de gitapp directory aanmaken en een lege git repository initialiseren voordat Rails bestanden zou toevoegen die het aan onze repository had gemaakt. Laten we eens kijken wat het in onze database configuratie heeft gezet:

Het heeft ook een aantal regels gegenereerd in onze database.yml configuratie die overeenkomen met onze keuze voor PostgreSQL als database.

Het enige addertje onder het gras bij het gebruik van de SCM-opties is dat je eerst de directory van je applicatie moet maken, dan je SCM moet initialiseren, waarna je het commando rails new kunt uitvoeren om de basis van je app te genereren.

3.2 server met verschillende backends

Velen hebben een groot aantal verschillende webservers in Ruby gemaakt, en velen van hen kunnen worden gebruikt om Rails te draaien. Sinds versie 2.3, gebruikt Rails Rack om zijn webpagina’s te serveren, wat betekent dat elke webserver die een Rack handler implementeert kan worden gebruikt. Dit omvat WEBrick, Mongrel, Thin en Phusion Passenger (om er een paar te noemen!).

Voor meer details over de Rack-integratie, zie Rails on Rack.

Om een andere server te gebruiken, installeer je gewoon de gem ervan en gebruik je de naam als eerste parameter voor rails server:

Feedback

Je wordt aangemoedigd om de kwaliteit van deze gids te helpen verbeteren.

Als je tikfouten of feitelijke fouten ziet die je zeker wilt patchen, kloon dan de rails repository en open een nieuw pull request. Je kunt ook om commit rechten vragen op docrails als je van plan bent om meerdere patches in te dienen. Commits worden gereviewd, maar dat gebeurt nadat je je bijdrage hebt ingediend. Deze repository wordt periodiek cross-merged met master.

Je kunt ook onvolledige inhoud vinden, of dingen die niet up-to-date zijn. Voeg alsjeblieft ontbrekende documentatie voor master toe. Controleer de Ruby on Rails Richtlijnen voor stijl en conventies.

Als je om wat voor reden dan ook iets ziet om op te lossen, maar het niet zelf kunt oplossen, open dan een issue.

En last but not least, elke vorm van discussie over Ruby on Rails documentatie is zeer welkom in de rubyonrails-docs mailing list.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.