2008-10-20 8 views
2

J'ai un projet inachevé qu'un développeur n'a tout simplement pas terminé et n'a laissé aucune documentation sur le processus d'installation. J'ai téléchargé le répertoire de production à ma machine windows (en cours d'exécution InstantRails 2), j'ai créé les bases de données requises dans le database.yml et j'ai essayé de courir le rake:db:migrate --trace mais je reçois le message d'erreur suivant:Rake db: migration abandonnée

(in D:/projects/broke2) 
** Invoke db:migrate (first_time) 
** Invoke environment (first_time) 
** Execute environment 
** Execute db:migrate 
rake aborted! 
uninitialized constant Admin 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:279:in `load_missing_constant' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:468:in `const_missing' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/dependencies.rb:480:in `const_missing' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/inflector.rb:285:in `constantize' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/inflector.rb:284:in `each' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/inflector.rb:284:in `constantize' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activesupport-2.1.1/lib/active_support/core_ext/string/inflections.rb:143:in `constantize' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:481:in `migrations' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/connection_adapters/mysql_adapter.rb:15:in `inject' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:465:in `each' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:465:in `inject' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:465:in `migrations' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:431:in `migrate' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:373:in `up' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/activerecord-2.1.1/lib/active_record/migration.rb:356:in `migrate' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rails-2.1.1/lib/tasks/databases.rake:99 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:617:in `call' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:617:in `execute' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:612:in `each' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:612:in `execute' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:578:in `invoke_with_call_chain' 
D:/InstantRails-2.0-win/ruby/lib/ruby/1.8/monitor.rb:242:in `synchronize' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:571:in `invoke_with_call_chain' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:564:in `invoke' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:2019:in `invoke_task' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1997:in `top_level' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1997:in `each' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1997:in `top_level' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:2036:in `standard_exception_handling' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1991:in `top_level' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1970:in `run' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:2036:in `standard_exception_handling' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/lib/rake.rb:1967:in `run' 
D:/InstantRails-2.0-win/ruby/lib/ruby/gems/1.8/gems/rake-0.8.3/bin/rake:31 
D:/InstantRails-2.0-win/ruby/bin/rake:19:in `load' 
D:/InstantRails-2.0-win/ruby/bin/rake:19 

Je suis un développeur régulier de Rails (ce n'est pas ma première application) mais je n'ai jamais vu cette erreur et je n'ai pas la moindre idée de l'endroit où débuter le débogage.

Répondre

2

Parfois Rails lancera cette erreur s'il y a une erreur de syntaxe où Admin est défini.

Essayez de rechercher admin.rb et assurez-vous qu'il analyse.

De même, vous pouvez essayer d'exécuter les migrations une à la fois (rake db:migrate VERSION=1, etc.) pour voir si cela vous aide à déterminer quelle migration provoque l'erreur ou si le problème est simplement de démarrer l'application.

1

Je dirais que votre problème est dans la partie uninitialized constant Admin de votre problème de migration. Avez-vous essayé de trouver où Admin est initialisé et y compris le chemin à cet endroit où vous l'utilisez? (Aussi, quel est le contenu de la tâche rake que vous exécutez?)

0

Il ne me pointe pas où j'ai une constante d'administration. Il y a un moyen de vérifier au moins où dois-je regarder? mes modèles, mes contrôleurs, etc? Rake db: migrate VERSION = 1, me donne déjà une erreur. Comme je vous l'ai dit, est-ce que j'essaie juste de terminer un projet inachevé par un autre gars.

Comment puis-je faire un fichier de migration par fichier?

Cordialement,

Victor

+0

Effectuez une sauvegarde de votre base de données, puis déposez-la complètement et essayez de migrer vers VERSION = 1. Puis VERSION = 2, etc. La constante Admin est probablement un modèle. Y a-t-il un fichier dans votre application appelé admin.rb? –

+0

c'est étrange. J'ai un 001_admin.rb mais il n'y a pas de modèle Admin. dans mon 001_admin.rb il essaie d'écrire dans la classe par défaut .. faire sens? –

+0

de toute façon j'ai corrigé. Je viens de renommer le fichier en 001_default.rb et a fonctionné. –

2

Je vous soupçonnez eu une migration qui a créé une table et a ajouté des données à l'aide d'un modèle. Plus tard dans le projet, le modèle a été renommé ou supprimé (tout comme le tableau peut-être?). Comme le modèle n'existait plus, les migrations échouèrent, mais personne ne remarqua qu'à ce moment-là, ils ne faisaient que quelques migrations à la fois, et non à partir d'une base de données propre.

La leçon ici ... si vous renommez des modèles ou des tables (ou si vous mettez à jour leurs validations et champs), vérifiez que vos migrations s'exécutent de toutes pièces sur la version de production actuelle.

+0

C'est très probablement la bonne réponse. –

0

Vous pouvez essayer de charger le schéma à la fois au lieu d'exécuter chaque migration:

rake db: schéma: charge

Comme RichH a dit qu'il pourrait y avoir eu un changement au schéma ne se reflète pas dans les migrations

Questions connexes