2009-02-24 12 views
5

Za każdym razem staram się uruchomić dowolną klasę z moich szynach lib 2.2 za pomocą aplikacji«skrypt/zawodnik -e produkcja ClassName.run»pojawia się następujący błąd:`const_missing ': niezainicjowany stała (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)" 

Z jakiegoś powodu nie otrzymuję tego błędu, gdy uruchamiam go jako test zamiast production i wszystko działa poprawnie.

O tak run jest metoda klasy tj def self.run .... end

sugestie?

Odpowiedz

10

Ten błąd występuje, gdy ruby ​​nie może znaleźć klasy ani modułu. Chciałbym zacząć od:

  1. sprawdzaniu zależności kosztownych (są takie same dla wszystkich środowiskach?)
  2. Znajdź swój kod do wszystkiego, co określa ClassName, zwłaszcza moduły klas i wtyczek.
  3. wyłączyć każdą wtyczkę w dev, czy jakaś wtyczka nagle spowoduje ten błąd?
  4. jeśli kod znajduje się w bibliotece lib dodaj instrukcję lib require do pliku production.rb, aby zmusić bibliotekę do załadowania do produkcji.

Nadzieję, że pomaga.

aktualizacja Wystarczy podsumować komentarze to była opcja 4.

ile tylko chcesz załadować lib w produkcji warto pomyśleć o upewniając się wszystkie środowiska załadować lib, wykonując jedną z następujących czynności:

  1. Tworzenie inicjator poręcze (plik .rb pod config/inicjalizatorów) ze wymaganie to
  2. Dodaj ścieżkę do lib w config/environment.rb poprzez umożliwienie i modyfikując zmienną config.load_paths.
+0

To jest to. Brakująca klasa, o której mowa, to taka, którą zdefiniowałem w bibliotece. Nawet proste rzeczy, takie jak dopasowanie nazwy klasy do nazwy pliku, są sprawdzane; w skrócie to jest zdefiniowane. Nie wiem, czego mi brakuje, ponieważ działa świetnie na dev i test po prostu nie jest produkcją – chaostheory

+0

Ah, to ciekawe ... OK jedną rzeczą związaną z przejściem do produkcji jest to, że rzeczy są inicjowane i przechowywane w pamięci podręcznej na różne sposoby test. Skąd wywoływana jest biblioteka? Szczególnie sprawdź, czy wymaganie biblioteki lib w production.rb rozwiązuje problem. – robertpostill

+0

Po prostu nazywam to z katalogu głównego mojej aplikacji ... Nie mogę się doczekać, aby przetestować to dziś wieczorem; OMG, jeśli to byłoby niesamowite, – chaostheory

1

Miałem wiele definicji klasy (wszystkie klasy STI) na tym samym pliku. i kiedy rozdzieliłem definicję na ich odpowiednie pliki, to działa

Powiązane problemy