2009-02-24 7 views
5

Chaque fois que je tente d'exécuter une classe de mes rails lib de 2.2 en utilisant l'application "script/runner production -e ClassName.run"J'obtiens l'erreur suivante:`const_missing ': constante initialisés (NameError)

/usr/lib/ruby/gems/1.8/gems/rails-2.2.2/lib/commands/runner.rb:47: 
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:89:in `const_missing': uninitialized constant ClassName (NameError)" 

Pour une raison quelconque, je ne reçois pas cette erreur lorsque je l'exécute comme test au lieu de production, et tout fonctionne bien.

O oui run est une méthode de classe à savoir def self.run .... end

Toutes les suggestions?

Répondre

10

Cette erreur se produit lorsque ruby ​​ne trouve pas de classe ou de module. Je commence par:

  1. dépendances de pierres précieuses Vérification (sont-ils même pour tous les environnements?)
  2. Rechercher votre code pour tout ce qui définit ClassName, en particulier modules, classes et plugins.
  3. Désactiver chacun de vos plugins en dev, est-ce que n'importe quel plugin provoque soudainement cette erreur?
  4. Si le code est dans une lib, ajoutez l'instruction lib require à votre production.rb pour forcer le chargement de la lib dans la production.

Espérons que ça aide.

mise à jour pour résumer les commentaires qu'il était l'option 4.

Sauf si vous voulez seulement charger le répertoire lib dans la production, vous devriez penser à faire que tous les environnements charger le répertoire lib en effectuant l'une des opérations suivantes:

  1. Créer un initialiseur de rails (un fichier .rb sous config/initializers) avec le besoin dans ce
  2. Ajouter le chemin vers le répertoire lib dans config/environment.rb en permettant et en modifiant la variable config.load_paths.
+0

C'est la chose. La classe manquante en question est celle que j'ai définie dans lib. Même des trucs simples comme la correspondance entre le nom de la classe et le nom du fichier sont vérifiés; bref c'est défini. Je ne sais pas ce que je manque car il fonctionne bien sur le développement et test juste pas la production – chaostheory

+0

Ah, c'est intéressant ... OK une chose à propos de passer à la production est que les choses sont initialisées et mises en cache de façon différente à dev et tester. D'où vient la lib? Particulièrement voir si exiger la lib dans production.rb résout le problème. – robertpostill

+0

Je viens de l'appeler de la racine de mon application ... J'ai hâte de tester cela ce soir; OMG si c'est ça qui serait génial – chaostheory

1

J'ai eu plusieurs définitions de classe (toutes les classes STI) sur le même fichier. et quand j'ai séparé la définition dans leurs dossiers respectifs, cela fonctionne

Questions connexes