Disons que j'ai une application avec un tas de fichiers de migration que je suis prêt à déployer en production pour la première fois. D'après ce que je comprends, j'ai essentiellement deux options pour obtenir le db sur le serveur de production:Comment db: schema: load affecte les futures actions db: migrate
- A - Exécuter
db:migrate
et avoir le cycle à travers toutes les migrations, il n'a pas encore exécuté - B - exécutez
db:schema:load
, et l'ont construit la db à partir du fichier de schéma
Je sais que B est le bon choix pour les déploiements frais, comme expliqué dans les commentaires schema.rb
:
# If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
Ce que je me demande, c'est comment cela affecte-t-il les migrations sur le serveur de production? Par exemple, si je suis dans l'ordre suivant:
- Exécutez
db:schema:load
sur un nouveau serveur de production. - Modifier mon schéma en développement et pousser à la production.
- Run
db:migrate
sur le serveur de production
Que se passera? Sera-t-il capable d'utiliser uniquement les migrations plus récentes que l'action db:schema:load
, ou tentera-t-il de les exécuter toutes?
Et vous n'avez pas pensé simplement à exécuter ces commandes de couple pour vous vérifier? –
@MichaelSzyndel - Qui a dit que je n'y avais pas pensé? – Yarin
Votre question le suggère. Si vous le faisiez, vous verriez que cela devrait fonctionner correctement (tant que la table db de migrations est remplie pendant 'schema: load' que je n'ai jamais vraiment vérifié) –