Lors de la démarrage d'un nouveau projet, il existe de nombreux changements dans les modèles que je trouve facile de modifier une migration et d'exécution existant Mais aujourd'hui, j'ai rencontré les conseils suivants dans Guide de rails disant que ce n'est pas une bonne idée & décourages éditer les migrations existantes: p>
Modification des migrations existantes n'est pas une bonne idée: vous allez créer
Travail supplémentaire pour vous-même et vos collègues et causer des maux de tête majeurs
Si la version existante de la migration a déjà été exécutée sur
machines de production. Au lieu de cela, vous devriez écrire une nouvelle migration qui
effectue les modifications dont vous avez besoin. Édition d'un fraîcheur généré
migration qui n'a pas encore été engagée dans le contrôle de la source (ou plus
Généralement, qui n'a pas été propagé au-delà de votre développement
la machine) est relativement inoffensif. P>
blockQuote>
Je veux savoir: p>
dB: nettoyer code> ou dB: réinitialiser code> que de créer une nouvelle migration. Je fais cela lorsque l'application n'a pas frappé la production, ce qui signifie que je peux réinitialiser / nettoyer la base de données sans souci et je travaille en solo ou une partie d'une petite équipe. p>
4 Réponses :
Si vous travaillez avec une équipe et que vous avez commis la migration, alors non. P>
Si ce n'est que sur votre environnement local, créez simplement une nouvelle migration de réparer ce dont vous avez besoin. Vous pouvez déposer des tables \ colonnes et faire ce dont vous avez besoin. P>
Puisque vous nettoyez la base de données et réinitialisez-la, tout le monde fera de même ou qu'il aura des problèmes s'ils essaient de migrer. p>
Oui, je suis dans mon environnement local. Donc, je suppose que ça va. Voulait juste confirmer. Merci pour votre réponse
Vous pouvez également migrer la base de données de la console de rails: activerecord :: migration.some_migration_mesthod (...) code>.
@tokland j'ai essayé activerecord :: migration.up.create_table ("test") code> Il est indiqué une méthode non définie. Quelle est la syntaxe?
Je travaille sur une application Web en mode développement. Bien que je travaille seul, il est préférable d'utiliser des migrations pour modifier la base de données. Cela pourrait laisser une traînée de modifications, mais vous pouvez voir l'évolution de votre structure de base de données. À long terme, vous deviendrez plus rapide pour résoudre les problèmes de DB avec les migrations. P>
Souhaitez-vous ajouter un peu plus de substance pour aider l'OP, comme quels pièges et / ou comment apprendre quelle est la "meilleure pratique"? Merci! (révision)
Les migrations de la base de données sont un outil. Comme toute boîte à outils La chose la plus importante est de comprendre ce qu'il est bon, comment l'utiliser et pourquoi l'utiliser de cette façon. P>
Je ne vous dis pas réellement de ne pas le faire. Ce ne sont que les principaux points quant à pourquoi ne pas faire comme je le vois. Je pose la plupart des cas si vous êtes seul ou surtout si vous créez simplement votre projet (et que vous ne réalisez pas immédiatement la manière dont vous souhaitez que la base de données ait l'air / que vous jouez directement avec eux peut être plus efficace. Il est important de comprendre pourquoi et pourquoi est-il avant de vous brouiller contre les meilleures pratiques. P>
Dès que vous avez commis une migration à GIT, tant que ce n'est pas une truc de la destruction de données ou de CI, vous ne devriez pas le changer. Ceci est axiomatique à l'ensemble du concept! P>
Le problème est, une fois que la migration est appliquée, elle ne fonctionne pas à nouveau, et si vous devez y remédier, vous risquez de risquer une perte de données involontaire. Vous devriez toujours simplement créer une nouvelle migration. P>
Il y a une exception à une exception et c'est difficile, à faire d'éliminer les dépendances. L'un des problèmes rencontrés par les migrations impliquant des tiers dans des circonstances limitées est que les dépendances sont une / ou une chose. Ils existent ou ils ne le font pas. Donc, si à un moment donné, vous ajoutez une dépendance que vous créez ensuite des références étrangères à partir de votre modèle et que vous convertissez une migration, puis supprimez cette dépendance, lorsque vous exécutez les migrations à partir de zéro, la dépendance liée à la Les migrations échoueront parce que la cible de la clé étrangère n'existe tout simplement plus. C'est un doozy d'un problème, car dans cette situation, vous devez en fait modifier les vieilles migrations pour supprimer les clés étrangères, mais vous devez également avoir une migration pour les installations existantes pour supprimer la clé. Le Patern General ici est si Votre système de migration est scriptable, jetez une chèque pour voir si la touche existe, puis, puis, puis supprimez la touche, sinon, sautez la suppression. Gardez à l'esprit, au fait, qu'un essayier {} à l'exception de la structure de type {} peut être le mauvais choix ici, car certains ormes font rouler les transactions alignées pour écrire lorsqu'une exception de toute sorte est soulevée pour éviter la corruption. p>
En règle générale, non, veuillez ne pas modifier les migrations existantes, mais si elle dans ces situations limitées où les externalités dictent une exigence, procédez avec des soins très délicats. P>
Pourquoi ne-même pas l'expérience de soi? :)
Je le fais déjà :)
Cela m'a rappelé que, une fois que nous avons utilisé des constantes mondiales dans les migrations, ces constantes ont été définies dans certains fichiers Constant.Rb, qui ont ensuite été modifiés par quelqu'un :) SO POINT EST TOUJOURS, utilisez toujours des valeurs codées durement dans les migrations, aucune variables, aucune constance
Accepter! Cependant, si je viens de créer un modèle et que je souhaite le changer, je trouve plus facile de modifier directement la migration. Aucun point de départ de la piste d'audit au début du processus