2009-06-13 19 views
5

En el entorno de desarrollo de rieles, cache_classes está desactivado, por lo que puede modificar el código en app/ y ver los cambios sin reiniciar el servidor.¿Cómo uso objetos de dominio del middleware con cache_classes desactivado?

En todos los entornos, sin embargo, el middleware solo se crea una vez. 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 

entonces siempre obtendrá el siguiente error:

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 la instancia MyMiddleware se crea 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 llamada a tiempo, pero eso cambia el problema a una nueva:

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' 
    ... 

Respuesta

2

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

Creo que this es la confirmación que solucionó el problema. El informe de error original es here.

-1

Sugerimos un problema similar al suyo hace algún tiempo. Por lo que recuerdo, esto podría remediarse estableciendo time_zone en environment.rb en: utc. Fue hace un tiempo y no recuerdo exactamente el nombre del parámetro de configuración o si era 'UTC' o: utc. Pruébalo, tal vez te ayude.

Cuestiones relacionadas