Subscribe to RSS Feed
Twitter
HIRE ME! home  archives  about  blogroll

Rails rake migration tasks

17 Dec 2008

Migrations, het is iets fantastisch en je gebruikt het bijna dagelijks wanneer je in Rails development zit. Zoals wij dus.

In het kort: het laat je toe om snel en gemakkelijk wijzigingen aan je database schema te maken. Met elke nieuwe migration kan je iets wijzigen maar ook deze wijziging terug ongedaan maken. Fantastisch dus, zeker in een agile omgeving.

Wanneer je een nieuwe migration schrijft kan het al eens voorvallen dat het nog niet helemaal snor zit, of dat er fouten inzitten. Op dat moment wil je die laatste migration ongedaan maken.

In den beginne gebeurde dat zo:

<% coderay :lang => ‘ruby’, :line_numbers => ‘inline’ do -%>
rake db:migrate VERSION=[version_number]
<% end -%>

Later is dat gewijzigd om allerhande goede redenen naar:

<% coderay :lang => ‘ruby’, :line_numbers => ‘inline’ do -%>
rake db:migrate VERSION=[timestamp]
<% end -%>

Maar met deze laatste moet je dus eerst de timestamp opzoeken. Lastig dus. Ik zat al enige tijd met dat probleem:

Het was genoeg. Ik moest en zou er iets aan doen. Ik heb dus zelf een rake task geschreven (rake db:undo_migration). Toen ik ze wou testen dacht ik: “Het kan niet zijn dat er nog niets voor bestaat, ik kan onmogelijk de enigste zijn met dit probleem.”

Guess what, Rails heeft het voorzien sinds versie 2.0:

<% coderay :lang => ‘ruby’, :line_numbers => ‘inline’ do -%>
rake db:migrate:redo # Rollbacks the database one migration and re migrate up.
rake db:rollback # Rolls the schema back to the previous version.
<% end -%>

Ik had het kunnen weten. Ik doe regelmatig een rake -T (geeft alle beschikbare rake tasks terug) maar om de éen of andere reden heb ik er altijd over gekeken.

blog comments powered by Disqus