2009-02-24 25 views
5

Cada vez que trato de ejecutar cualquier clase de mis rieles lib 2.2 de aplicación usando 'script/mensajero de producción -e ClassName.run' me sale el siguiente error:`const_missing ': constantes sin inicializar (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)" 

Por alguna razón no obtengo este error cuando lo ejecuto como test en lugar de production, y todo funciona bien.

O sí run es un método de clase es decir def self.run .... end

alguna sugerencia?

Respuesta

10

Ese error ocurre cuando Ruby no puede encontrar una Clase o Módulo. Yo empezaría por:

  1. Comprobación de dependencias de gemas (que son iguales para todos los entornos?)
  2. Busque su código para cualquier cosa que define NombredeClase, en particular los Módulos, Clases y plugins.
  3. deshabilita cada uno de tus complementos en dev, ¿algún plugin de repente causa ese error?
  4. si el código está en una lib, agregue la instrucción de necesidad de lib a su producción.rb para forzar que la lib se cargue en producción.

Espero que ayude.

actualización Sólo para resumir los comentarios fue la opción 4.

a menos que sólo quiere cargar el lib en la producción se debe pensar en hacer que todos los entornos cargan el lib mediante uno de los siguientes:

  1. Crear un inicializador carriles (un archivo .rb bajo config/inicializadores) con el requiere en ella
  2. Añadir la ruta a la lib en config/environment.rb habilitando y modificar la variable config.load_paths.
+0

Esa es la cosa. La clase que falta en cuestión es una que he definido en lib. Incluso cosas sencillas como la coincidencia del nombre de clase con el nombre del archivo se comprueban; en resumen, está definido. No sé lo que me estoy perdiendo, ya que funciona muy bien en dev y prueba simplemente no producción – chaostheory

+0

Ah, eso es interesante ... Bien, una cosa acerca de pasar a producción es que las cosas se inicializan y almacenan en caché de diferentes maneras para dev y prueba. ¿De dónde se llama la lib? Particularmente vea si requiere la lib en production.rb resuelve el problema. – robertpostill

+0

Acabo de llamarlo desde la raíz de mi aplicación ... No puedo esperar para probar esto esta noche; OMG si esto es lo que sería increíble – chaostheory

1

Tenía una definición de clase múltiple (todas las clases de STI) en el mismo archivo. y cuando separé la definición en sus respectivos archivos, Funciona

Cuestiones relacionadas