Migração de dados - não apenas esquema, Rails

As vezes,dados migrações são necessárias. Conforme o tempo passa, as alterações de código e as migrações que usam seu modelo de domínio não são mais válidas e as migrações falham. Quais são as práticas recomendadas para migrar dados?

Eu tentei fazer um exemplo para esclarecer o problema:

Considere isto. Você tem uma migração

class ChangeFromPartnerAppliedToAppliedAt < ActiveRecord::Migration
  def up
    User.all.each do |user|
      user.applied_at = user.partner_application_at
      user.save
   end
 end

isso funciona perfeitamente bem, claro. Mais tarde, você precisa de uma mudança de esquema

class AddAcceptanceConfirmedAt < ActiveRecord::Migration
  def change
    add_column :users, :acceptance_confirmed_at, :datetime
  end
end

class User < ActiveRecord::Base
  before_save :do_something_with_acceptance_confirmed_at
end

Para você, não há problema. Corre perfeitamente. Mas se o seu colega puxa ambos hoje,não ter executado a primeira migração ainda, ele receberá esse erro ao executar a primeira migração:

rake aborted!
An error has occurred, this and all later migrations canceled:
undefined method `acceptance_confirmed_at=' for #<User:0x007f85902346d8>

Isso não é um jogador da equipe, ele estará consertando o bug que você introduziu. O que você deveria ter feito?

questionAnswers(3)

yourAnswerToTheQuestion