Pregunta

En el entorno de desarrollo de los carriles, cache_classes está apagado para que pueda modificar código bajo app/ y ver los cambios sin necesidad de reiniciar el servidor.

En todos los ambientes, sin embargo, el middleware se creará una vez solamente. Así que si tengo middleware como esto:

class MyMiddleware

  def initialize(app)
    @app = app
  end

  def call(env)
    env['model'] = MyModel.first
  end

end

y hago esto en config/environments/development.rb:

config.cache_classes = false # the default for development
config.middleware.use MyMiddleware

a continuación, siempre voy a conseguir el error siguiente:

A copy of MyMiddleware has been removed from the module tree but is still active!
  /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:414:in `load_missing_constant'
  /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/dependencies.rb:96:in `const_missing'
  /Users/me/projects/my_project/lib/my_middleware.rb:8:in `call'
  /Library/Ruby/Gems/1.8/gems/actionpack-2.3.2/lib/action_controller/middleware_stack.rb:72:in `new'
  ...

El problema es que se crea la instancia MyMiddleware una vez en el tiempo de carga del sistema, pero la clase MyModel se vuelve a cargar en cada llamada.

Me trataron 'MyModel'.constantize.first para retrasar la unión a la clase hasta método de llamar a tiempo, pero eso cambia el problema a uno nuevo:

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.include?
  /Library/Ruby/Gems/1.8/gems/activerecord-2.3.2/active_record/attribute_methods.rb:142in `create_time_zone_conversion_attribute?'
  /Library/Ruby/Gems/1.8/gems/activerecord-2.3.2/active_record/attribute_methods.rb:75:in `define_attributes_methods'
  ...
¿Fue útil?

Solución

Esto parece ser un error rieles. Vea si puede actualizar su versión de Rails a 2.3.4 o 2.3.5.

este es la confirmación que fija el problema. Original de informe de error es aquí .

Otros consejos

Nos encontramos con un problema similar al suyo hace algún tiempo. Por lo que yo recuerdo que esto podría remediarse mediante el establecimiento de time_zone en environment.rb a: UTC. Fue hace un tiempo y no recuerdo exactamente el nombre del parámetro de configuración o si fue 'UTC' o: UTC. Darle una oportunidad, tal vez que va a ayudar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top