Question

Dans l'environnement de développement des rails, cache_classes est hors de sorte que vous pouvez modifier le code sous app/ et les modifications sans redémarrer le serveur.

Dans tous les environnements, bien que, le middleware est créé uniquement une fois. Donc, si je middleware comme ceci:

class MyMiddleware

  def initialize(app)
    @app = app
  end

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

end

et je le fais en config/environments/development.rb:

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

alors je vais toujours obtenir l'erreur suivante:

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

Le problème est que l'instance de MyMiddleware est créé une fois au moment du chargement du système, mais la classe MyModel est rechargée à chaque appel.

J'ai essayé 'MyModel'.constantize.first de retarder la liaison à la classe jusqu'à ce que méthode call-temps, mais cela change le problème à un nouveau:

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'
  ...
Était-ce utile?

La solution

Cela semble être un bug Rails. Voyez si vous pouvez mettre à jour votre version Rails ou 2.3.5 2.3.4.

Je crois que cette est le commettras qui a résolu le problème. Rapport original bug est .

Autres conseils

Nous avons rencontré un problème similaire à la vôtre il y a quelque temps. Pour autant que je me rappelle cela pourrait être remédié en mettant en time_zone environment.rb à: utc. Il était tout à l'heure et je ne me souviens pas exactement le nom du paramètre de configuration ou si elle était « UTC » ou: utc. Faites un essai, ça va peut-être aider.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top