Vad är migrationer?

Ett fräsigt sätt att i Ruby definiera sitt databas-schema. När schemat växer lägger man till en ny migrationsfil. Ett enkelt kommando – rake db:migrate skapar SQL för den aktuella databas-adaptern.

Schema as code. Very agile.

API-dokumentationen berättar mera

Trubbel med migrationer

Tumregel: en bra tumregel är att aldrig ändra data i migrationer. Det är bättre att göra det i rake-tasks, eftersom då slipper man eventuella Migration-meck.

Följande data-flyttnings-task kommer från Albert:


namespace :adocca do
  desc "Clean orphaned user images" 
  task :clean_profile_images  => :environment do |t|
    Image.find_all_by_attachable_type('User').each do |i|
      i.destroy unless User.find(i.attachable_id).image.id == i.id 
    end
  end
end

Ovanstående körs alltså med rake adocca:clean_profile_images. Notera att Railsmiljön laddas genom att göra en dependency (:environment) på :clean_profile_images

Annat

OlleJonsson: Jag hade problem med kommandot rename_column, som satte datat i kolumnen till NULL (under sqlite3). (Faktiskt även senare.)

Branstrom: Togs alltså all data bort, eller var det bara att den blev null-by-default?: http://dev.rubyonrails.org/ticket/6999 (MySQL drops options during rename_column)

Revised on November 16, 2009 06:39:54 by Anonymous Coward