J'ai une migration qui est la rupture au milieu d'un couple de changements de schéma. Quand il se casse une exception est levée et rake db: migrate quitte, laissant ma base de données dans un état à moitié migré.Utiliser db: migrate: refaire lors de la manipulation correctement exceptions de modifications de schéma
Comment puis-je le configurer de sorte que la migration revient automatiquement seulement les changements qui ont été exécutées à ce jour? Je voudrais le faire globalement en mode développement. Sûrement quelqu'un là-bas a une meilleure façon que l'intégration de chaque AR::Migration::ClassMethod
successives dans un bloc begin; rescue =>e opposite_action; end
.
Peut-être un exemple courant est en ordre:
#2010010100000000_made_a_typo.rb
class MadeATypo < ActiveRecord::Migration
def self.up
rename_column :birds, :url, :photo_file_name
rename_column :birds, :genius, :species #typo on :genius => :genus
end
def self.down
rename_column :birds, :photo_file_name, :url
rename_column :birds, :species, :genius
end
end
Cette migration échoue sur la deuxième ligne avec le « génie de colonne est introuvable », mais pas enregistrer le numéro de la migration dans la table schema_migrations. Je voudrais si elle a appelé
rename_column :birds, :photo_file_name, :url #this is a revert of the first line
avant que l'exception a été adoptée sur MadeATypo.up
.
Les réponses aux commentaires:
Je comprends que MySQL pourrait ne pas avoir le soutien pour les transactions DDL, je suis à la recherche d'une solution plus au niveau de l'application qui (probablement) utilise AR :: migration elle-même. Il est certain que quelqu'un a créé un plugin qui capture les appels de méthode au AR: M: ClassMethods principal et peut les rembobiner dans la plupart des cas si une exception survient pendant une migration.
C'est génial. Je vous remercie. –