Question

rake db: migrate ajoute-t-il uniquement de nouvelles migrations ou supprime-t-il toutes les migrations / modifications et crée-t-il de toutes nouvelles?

Je pense que rake génère une erreur car il tente d'accéder à un attribut de table de la migration 040 qui a été supprimé de la migration 042. D'une manière ou d'une autre, ma base de données et mon rake ne sont pas synchronisés et je souhaite les corriger.

pour vous, experts, est-il courant que Rake ne se synchronise pas avec les migrations? comment puis-je éviter cela (non, je ne modifie pas à la main mon schéma ni les fichiers rake).

Était-ce utile?

La solution

Chaque fois que vous créez une migration à l'aide de scripts (tels que script / générer un modèle, etc.), une nouvelle migration est ajoutée au répertoire approprié, prête à être synchronisée avec la base de données réelle.

En fait, rake db: migrate ne fait que vérifier les migrations manquantes qui doivent encore être appliquées à la base de données sans se soucier des précédentes.

Bien sûr, si vous modifiez la base de données par d'autres moyens, il est courant d'obtenir des éléments désynchronisés, car, comme vous l'avez dit, vous pouvez appliquer une migration à quelque chose qui change en dessous.

Autres conseils

Lorsque vous utilisez des migrations rails, une table nommée schema_migrations est automatiquement créée. Elle enregistre les migrations appliquées, en stockant le numéro de version de chaque migration (il s'agit du numéro qui nom de migration dans le nom du fichier, par exemple db / migrate / _20090617111204__migration.rb). Lorsque vous exécutez rake db: migrate pour migrer vers le haut, seules les migrations qui n’ont pas déjà été exécutées (c’est-à-dire que leur version ne figure pas dans le tableau) seront exécutées (pour cette raison, une migration déjà exécuté n'aura aucun effet lors de l'exécution de db: migrate ). Lors de la migration vers le bas, toutes les versions trouvées dans schema_migrations qui sont supérieures à la version que vous annulez sont annulées.

Une migration signifie que vous passez de la version actuelle à une version plus récente (comme indiqué dans la première réponse). En utilisant rake db: migrate, vous pouvez appliquer les nouvelles modifications à votre schéma. Mais si vous souhaitez revenir à une migration précédente, vous pouvez utiliser rake db: rollback pour annuler vos nouvelles modifications si elles ne sont pas définies correctement. Attention, vos données seront perdues.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top