Migracja danych - nie tylko schemat, szyny

Czasami,dane migracje są wymagane. W miarę upływu czasu zmiany kodu i migracje przy użyciu modelu domeny nie są już ważne i migracje nie powiodą się. Jakie są najlepsze praktyki dotyczące migracji danych?

Próbowałem stworzyć przykład wyjaśniający problem:

Rozważ to. Masz migrację

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

oczywiście działa to doskonale. Później potrzebujesz zmiany schematu

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

Dla ciebie nie ma problemu. Działa doskonale. Ale jeśli twój współpracownik wyciągnie obie te rzeczy dzisiaj,nie przeprowadziłem jeszcze pierwszej migracji, dostanie ten błąd podczas uruchamiania pierwszej migracji:

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

To nie jest gra zespołowa, naprawi wprowadzony błąd. Co powinieneś zrobić?

questionAnswers(3)

yourAnswerToTheQuestion