2009-02-24 24 views
5

Jedes Mal, wenn ich versuche, jede Klasse von meinen Schienen 2.2 App lib mit‚script/runner -e Produktion ClassName.run‘zu laufen bekomme ich folgende Fehlermeldung:`const_missing ': nicht initialisierte Konstante (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)" 

Aus irgendeinem Grund bekomme ich diesen Fehler nicht, wenn ich es als test anstelle von production ausführen, und alles funktioniert gut.

O ja run ist eine Klassenmethode heißt def self.run .... end

Irgendwelche Vorschläge?

Antwort

10

Dieser Fehler tritt auf, wenn Ruby eine Klasse oder ein Modul nicht finden kann. Ich würde beginnen mit:

  1. Überprüfung gem Abhängigkeiten (sie sind für alle Umgebungen?)
  2. Suchen Sie Ihren Code für alles, was Klassennamen definiert, insbesondere Module, Klassen und Plugins.
  3. deaktivieren Sie jedes Ihrer Plugins in dev, verursacht irgendein Plugin plötzlich diesen Fehler?
  4. Wenn der Code in einer Lib ist, fügen Sie die Anweisung lib require zu Ihrer production.rb hinzu, um zu erzwingen, dass die lib in der Produktion geladen wird.

Hoffe, dass hilft.

Update einfach zusammenfassen Kommentare es war Option 4.

Wenn Sie nur die lib in der Produktion laden möchten Sie sicherstellen, dass alle Umgebungen laden Sie die lib, indem Sie eine der folgenden Möglichkeiten denken sollte:

  1. eine Schiene initializer erstellen (eine .rb Datei unter config/initializers) mit dem erfordern darin
  2. den Pfad zum lib in config/environment.rb hinzu, indem ermöglicht und die config.load_paths Größe zu verändern.
+0

Das ist die Sache. Die fragliche fehlende Klasse ist eine, die ich in lib definiert habe. Selbst einfache Dinge wie das Vergleichen des Klassennamens mit dem Dateinamen werden ausgecheckt; Kurz gesagt, es ist definiert. Ich weiß nicht, was ich vermisse, da es großartig auf Dev läuft und test einfach nicht Produktion – chaostheory

+0

Ah, das ist interessant ... OK eine Sache über den Umzug in die Produktion ist, dass Dinge auf verschiedene Arten zu dev initialisiert und zwischengespeichert werden Prüfung. Woher wird die lib aufgerufen? Sehen Sie sich insbesondere an, ob die lib in production.rb erforderlich ist, um das Problem zu lösen. – robertpostill

+0

Ich nenne es einfach von der Wurzel meiner App ... Ich kann es kaum erwarten, das heute Abend zu testen; OMG wenn das das ist, wäre das super – chaostheory

1

ich mehrere Klassendefinition (alle STI-Klassen) auf der gleichen Datei hatte. und wenn ich die Definition in ihre jeweiligen Dateien getrennt habe, funktioniert es

Verwandte Themen