web-dev-qa-db-fra.com

Rails 4 comment ignorer les migrations en attente

Le problème suit:

  • J'ai db/seed.rb plein de données initiales.
  • L'une des migrations dépend des données fournies par cette graine.
  • J'essaie de déployer mon application à partir d'une base de données vide.

Le résultat est:

  • Rails_ENV = production rake db: migrer - échoue en raison du manque de données initiales
  • Rails_ENV = production rake db: seed - échoue en raison de migrations en attente

Je voulais en quelque sorte dire à rake d'ignorer les migrations en attente, mais je ne pouvais pas le faire jusqu'à présent.

MISE À JOUR (en raison d'une expérience supplémentaire)

Parfois, les migrations et le code du modèle sont désynchronisés, de sorte que les migrations ne sont pas exécutées. Pour éviter ce problème récemment utilisé la redéfinition du modèle dans les migrations:

# reset all callbacks, hooks, etc for this model
class MyAwesomeModel < ActiveRecord::Base
end

class DoSomethingCool < ActiveRecord::Migration
  def change
    ...
  end
end
47
Waterlink

Rails stocke les informations de migration dans une table appelée schema_migrations.

Vous pouvez ajouter la version de votre migration dans cette table pour ignorer une migration spécifique.

La version est la chaîne numérique qui précède la description dans le nom de fichier.

[version]_Create_Awesome.rb
12
Dan Grahn

Je ne sais pas très bien si cela vous aidera. Mais je cherchais quelque chose et j'ai trouvé cette question. Il semble donc que cela pourrait aider:

Dans Rails_ROOT/config/environnements/development.rb Définissez le paramètre suivant sur false:

 config.active_record.migration_error = false#:page_load

Dans ma situation, il ne montre plus l'erreur de migration en attente. Devrait également fonctionner pour les tâches de râteau et la console pour le même environnement.

130
whizcreed

Renommez la migration en fonction des données de:

20140730091353_migration_name.rb

à

.20140730091353_migration_name.rb

(ajoutez un point au début du nom de fichier)

Exécutez ensuite rake db:seed (il ne se plaindra plus des migrations en attente), puis renommez la migration.

Si vous avez plus de migrations après, vous devez tous les renommer ou simplement les déplacer temporairement.

26
mirelon

J'ai eu un problème similaire. J'ai commenté les lignes add_column et exécuté les commandes rake db: migrate, puis supprimé le commentaire lorsque j'en aurai besoin pour l'environnement de test ou de production.

2
siva

Il n'y a aucun moyen à moins que vous ne corrigiez le code Rails. Je vous conseille fortement de corriger vos migrations à la place.

Une migration ne doit pas dépendre de l'existence de certaines données dans la base de données. Cela peut dépendre d'une migration précédente, mais bien sûr absolument pas des données de la base de données.

2
Simone Carletti