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.
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.
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...
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.
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.