Rail rake db:migrate n'a pas d'effet

j'ai fait une nouvelle application de Rails 3 aujourd'hui, j'ai ajouté une migration simple, et pour une raison quelconque, rien ne se passe quand je fais rake db:migrate. Il fait une pause de quelques secondes, puis retourne à l'invite de commande, sans aucune erreur. Schéma.rb et la base de données restent vides.

des idées de ce qui pourrait se passer? J'ai fait beaucoup d'applications et je n'ai jamais eu ce problème. Tout est une installation totalement standard aussi.

28
demandé sur Jack Hoge 2011-04-08 20:43:21

5 réponses

il y a quelques raisons pour lesquelles vos migrations ne fonctionneront pas, mais la plus courante est que le système a déjà l'impression que toutes les migrations que vous avez définies ont déjà été effectuées.

Chaque migration crée une entrée dans le schema_migrations tableau version colonne correspondant au numéro d'identification. Si vous voulez forcer une migration à recommencer, vous pouvez généralement l'annuler et la rejouer. Par exemple, si vous avez eu 20100421175455_create_things.rb alors vous le relanceriez en utilisant:

rake db:migrate:redo VERSION=20100421175455

une situation courante est que votre migration n'a pas réussi à s'exécuter en premier lieu, qu'elle a généré une exception par exemple, et pourtant les Rails la considèrent encore complète. Pour relancer de force une migration, supprimez l'enregistrement correspondant de schema_migrations table et run rake db:migrate nouveau.

Une façon d'éviter ce genre de problème dans le futur est à définir votre migrations avec retour automatique-procédure:

class CreateThings < ActiveRecord::Migration
  def self.up
    # ... (migration) ...

  rescue
    # If an exception occurs, back out of this migration, but ignore any
    # exceptions generated there. Do the best you can.
    self.down rescue nil

    # Re-raise this exception for diagnostic purposes.
    raise
  end
end

Si vous avez une erreur dans votre migration, vous verrez l'exception figurant sur la console. Depuis la migration a été automatiquement annulée, vous devriez être en mesure d'exécuter encore et encore jusqu'à ce que vous obteniez la bonne.

60
répondu tadman 2011-04-08 20:13:56

appel spring stop pourrait résoudre vos problèmes.

1
répondu limlim 2017-09-24 13:18:41

Eh bien, j'ai découvert ce qui causait mon problème. J'utilise la gemme slim_scrooge et en la commentant, tout se passe normalement. Je ne sais pas pourquoi...

0
répondu Jack Hoge 2011-04-09 09:46:46

j'ai fait face au même problème. J'ai fait une sorte de petit piratage qui m'a aidé. Je le poste juste au cas où quelqu'un voudrait une solution courte et douce. Je suis d'accord avec ce que Tadman dit

" le système a déjà l'impression que toutes les migrations vous avez défini avez déjà exécuté"

ce que j'ai fait était de changer le nom du fichier migrate dans le / app_folder / db / migrate dossier. Je pense que la partie numérique du nom de la ruby migrate file est le moment où le fichier a été créé.

vous pouvez ajouter say 1, au nom du fichier, à chaque fois que vous voulez relancer le migrate. Après avoir changé le nom drop / delete la table (j'ai utilisé l'outil de ligne de commande mysql pour supprimer) et puis exécuter rake db: migrate et les migrations devraient être faites.

0
répondu Gaurav 2015-04-13 16:08:05

j'ai rencontré le même problème aujourd'hui lors de la migration du plugin pour Redmine en utilisant

rake redmine:plugins:migrate RAILS_ENV=production NAME=plugin_name

où plugin_name est en fait le nom du plugin défini dans init.rb du plugin.

j'ai lutté pendant 4 heures et finalement j'ai compris que mon nom de répertoire de plugin n'était pas le même que le nom de plugin (note redmine_ préfixe):

~/redmine/plugins/redmine_plugin_name

Donc, assurez-vous que votre plugin est placé dans un dossier nommé d'après le nom du plugin. Je crois que cela s'applique aussi à d'autres applications de rails.

0
répondu Anton R 2015-06-05 11:55:06