2009-08-07 8 views
17

Siempre que dos peticiones HTTP concurrentes van a mi aplicación Rails, la segunda siempre devuelve el siguiente error:Una copia de ApplicationController ha sido eliminado del árbol de módulo, pero sigue activo

A copy of ApplicationController has been removed from the module tree but is still active!

partir de ahí se da un poco útil Seguimiento de la pila en el sentido de "nosotros fuimos a través del material de servidor estándar, corrió su primera before_filter en ApplicationController (y he comprobado, es sólo lo que el filtro se ejecuta en primer lugar)", a continuación, ofrece el siguiente:

/home/matchu/rails/torch/vendor/rails/activesupport/lib/active_support/dependencies.rb:414:in `load_missing_constant'

/home/matchu/rails/torch/vendor/rails/activesupport/lib/active_support/dependencies.rb:96:in `const_missing'

que asumo es una respuesta genérica y realmente no dice mucho.

Google parece decirme que las personas que desarrollen Rails Engines se encontrarán con esto, pero yo no hago eso. Todo lo que he hecho es actualizar mi aplicación Rails de 2.2 (2.1?) A 2.3.

¿Cuáles son algunas de las causas posibles de este error y cómo puedo averiguar qué está sucediendo realmente? Sé que esta pregunta es vaga, ¿sería útil alguna otra información?

Más importante: intenté hacer una prueba en un entorno de "producción" en este momento, y el error no parece persistir. ¿Esto solo afecta el desarrollo, entonces, y no necesito preocuparme demasiado?

Respuesta

8

Esto es un error en Rails 2.3.3:

El RE es un parche para ello (pero incompleta?) en 2-3-estable:

Usted tiene algunas opciones para abordar el problema:

  • Revertir para Rails 2.3.2, espere a que salga 2.3.4, probablemente a finales de agosto. 2.3.3 tiene un par de problemas, así que podría ser lo mejor.
  • El problema no debería ocurrir en el modo de producción, ni sucederá en modo de desarrollo en el servidor Thin. Si tiene este problema en Google Engines en modo de producción, el parche es su única esperanza. Si solo está en modo dev, puede ejecutar su servidor local con Thin en lugar de Mongrel.
  • Si se trata de Google Engines, puede salir de Google Engines y alojar su aplicación de otra manera. Sin embargo, esto parece mucho trabajo.

La mejor de las suertes, este es un error muy malo que muchas personas se están encontrando.

+0

Oh, vaya, me alegra saber que no soy yo. Creo que me sentaré y esperaré, ya que esta aplicación se implementará en un mes más o menos, pero incluso si no sale, tener la actualización solo importa. para mi cordura. ¡Gracias por dejarme saber que no soy el único! – Matchu

+1

Usar WEBrick o Thin Server o Mongrel no resolverá el problema. He intentado con los tres servidores pero aún así existe el problema. –

+0

Shree Sé que evitar mongrel fue una solución recomendada y funciona para varias personas que conozco. ¿Estás en Rails 2.3.3? ¿Estás seguro de que es el mismo problema? – mixonic

0

Weird.

Intentando ejecutar "rake rails: update" para asegurarse de que las configuraciones son secuencias de comandos actualizadas. Puede que tenga que verificar los existentes contra una aplicación de plantilla.

+0

No hay salida en la tarea de rake =/ – Matchu

+0

Maldición. Nunca he visto esto antes, y veo lo que quieres decir con respecto a los Motores que causan el error. Con suerte, alguien más podría ayudar. Lo siento :( – askegg

0

tuve este error y de memoria fue una de las tres cosas que lo arreglaron.

1) Necesitaba actualizar mongrel/rack 2) Tenía una variable de entorno de la autenticación restful que había pasado a los archivos production.rb y development.rb desde environment.rb, volviéndolo al entorno. rb parecía ayudar 3) will_paginate era de fecha

1

que además de las soluciones mencionadas en las otras respuestas, he encontrado otros dos:

  1. añadir "config.cache_classes = false" a su archivo de entornos development.rb config//. Esto tiene el desafortunado efecto secundario de requerirle que reinicie su servidor cada vez que quiera ver los cambios.
  2. Añadir 'descargable' dentro de sus clases de controlador en su motor. Ver http://strd6.com/?p=250 y http://dev.rubyonrails.org/ticket/6001

No he probado el segundo enfoque, ya que encontré la otra solución en primer lugar, pero no es, por supuesto, una solución de compromiso entre evitar tener que editar el código del plugin, que puede ser revertida si un Se descarga la versión más nueva del complemento y luego se facilita la facilidad de desarrollo al no tener que reiniciar el servidor de desarrollo todo el tiempo en la segunda solución.

1

i enfrenta con el mismo problema para mi nuevo motor en los carriles 2.3.4 y me encontré con solución here.

llamando unloadable método resolvió mi problema.

0

Llamamos a un modelo activerecord en un módulo de espacio de nombres que anula el "nombre" método de clase. Rails espera que el método de nombre devuelva Product :: Categories :: MilkProducts :: Firstproduct pero obtiene solo Firstproduct y arroja un error. Entonces, si obtiene este error, primero compruebe si ha redefinido self.name.

  • Firstproduct.method (: nombre) .owner debe ser Módulo
  • Firstproduct.method (: nombre) .source_location

fuente:

module Product::Categories::MilkProducts 
    class Base 
    def self.name 
     self.to_s.demodulize 
    end 
    end 
    class Firstproduct < Base 
    self.product = Product.first 
    end 
end 
Cuestiones relacionadas