どのように私はオフcache_classesとミドルウェアからドメインオブジェクトを使用していますか?
-
13-09-2019 - |
質問
レールの開発環境では、cache_classes
はそうあなたがapp/
下のコードを変更し、サーバーを再起動せずに変更を見ることができますオフになっています。
は、すべての環境では、しかし、ミドルウェアは、一度だけ作成されます。だから私はこのようなミドルウェアを持っている場合:
class MyMiddleware
def initialize(app)
@app = app
end
def call(env)
env['model'] = MyModel.first
end
end
と私はconfig/environments/development.rb
で次の操作を行います。
config.cache_classes = false # the default for development
config.middleware.use MyMiddleware
私は常に、次のエラーが発生します
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'
...
問題がMyMiddleware
インスタンスがシステム負荷の時に一度作成されていることですが、MyModel
クラスは呼び出しごとに再ロードされます。
私は、メソッド呼び出し時まで、クラスへの結合を遅らせるように'MyModel'.constantize.first
を試してみましたが、それは新しいものに問題を変更します:
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'
...
他のヒント
私たちはいくつかの時間前にあなたに似た問題が発生しました。 UTC:私の知る限り、これを覚えているようにenvironment.rbにでTIME_ZONEを設定することによって改善することができます。これは、しばらく前だったと私は正確にconfigパラメータの名前を覚えていないか、それが「UTC」かあったかどうか:UTC。それを試してみる、多分それはお手伝いします。
所属していません StackOverflow