Frage

In der Schienen-Entwicklungsumgebung, cache_classes ausgeschaltet ist, so dass Sie Code unter app/ ändern können und Änderungen sehen, ohne den Server neu zu starten.

In allen Umgebungen, obwohl, Middleware wird nur einmal erstellt. Also, wenn ich Middleware wie folgt aus:

class MyMiddleware

  def initialize(app)
    @app = app
  end

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

end

, und ich tue dies in config/environments/development.rb:

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

dann werde ich immer erhalten folgende Fehlermeldung:

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

Das Problem ist, dass die MyMiddleware Instanz einmal bei Systemladezeit erstellt wird, aber die MyModel Klasse wird bei jedem Aufruf neu geladen.

habe ich versucht, 'MyModel'.constantize.first bis Methode-Anforderungs-Zeitdauer der Klasse verbindlich zu verzögern, aber das ändert sich das Problem auf eine neue:

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'
  ...
War es hilfreich?

Lösung

Dies scheint ein Rails Bug zu sein. Sehen Sie, wenn Sie Ihre Rails-Version 2.3.4 oder 2.3.5 aktualisieren.

Ich glaube, diese der Commit ist, dass das Problem behoben. Original Fehlerbericht ist hier .

Andere Tipps

Wir stießen auf ein Problem ähnlich wie bei Ihnen vor einiger Zeit. utc: Soweit ich dies durch Setzen time_zone in environment.rb zu beheben erinnern konnte. Es war eine Weile her, und ich erinnere mich nicht mehr genau die Konfigurationsparameternamen oder ob es sich um ‚UTC‘ oder: utc. Probieren Sie es aus, vielleicht wird es helfen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top