2009-02-24 15 views
5

Ogni volta che si tenta di eseguire qualsiasi classe dai miei binari directory lib 2.2 Applicazioni che usano "lo script/runner produzione -e ClassName.run" ottengo il seguente errore:`const_missing ': non inizializzato costante (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)" 

Per qualche motivo non visualizzo questo errore quando lo eseguo come test anziché production e tutto funziona correttamente.

O sì run è un metodo di classe cioè def self.run .... end

Qualche suggerimento?

risposta

10

Questo errore si verifica quando Ruby non riesce a trovare una classe o un modulo. Comincerei da:

  1. Controllo dipendenze gemma (sono uguali per tutti gli ambienti?)
  2. cercare il vostro codice per tutto ciò che definisce ClassName, in particolare i moduli, classi e plugin.
  3. disabilita ciascuno dei tuoi plugin in dev, qualche plugin causa improvvisamente quell'errore?
  4. se il codice è in una lib, aggiungere l'istruzione require lib al file production.rb per forzare il caricamento della lib in produzione.

Spero che questo aiuti.

aggiornamento Giusto per riassumere i commenti che era l'opzione 4.

A meno che non solo si desidera caricare il lib nella produzione si dovrebbe pensare di fare in modo tutti gli ambienti caricare il lib effettuando una delle seguenti operazioni:

  1. Creare un inizializzatore rotaie (un file .RB sotto config/inizializzatori) con la richiedono in esso
  2. Aggiungi il percorso del lib in config/environment.rb attivando e modificando la variabile config.load_paths.
+0

Questa è la cosa. La classe mancante in questione è quella che ho definito in lib. Anche le cose semplici come la corrispondenza tra il nome della classe e il nome del file vengono verificate; in breve è definito. Non so cosa mi manca dato che funziona molto bene su dev e il test non è produzione – chaostheory

+0

Ah, è interessante ... OK, una cosa che riguarda lo spostamento verso la produzione è che le cose sono inizializzate e memorizzate in cache in modi diversi da dev e test. Da dove viene chiamata la lib? In particolare, vedere se richiedere la lib in production.rb risolve il problema. – robertpostill

+0

Ho appena chiamato dalla radice della mia app ... Non vedo l'ora di provarlo stasera; OMG se questo sarebbe fantastico – chaostheory

1

Ho avuto più definizione di classe (tutte le classi STI) sullo stesso file. e quando ho separato la definizione nei rispettivi file, funziona

Problemi correlati