रेल विकास पर्यावरण में, cache_classes
बंद है ताकि आप app/
के तहत कोड संशोधित कर सकें और सर्वर को पुनरारंभ किए बिना परिवर्तन देख सकें।मैं मध्यस्थ से cache_classes के साथ डोमेन ऑब्जेक्ट्स का उपयोग कैसे करूं?
सभी वातावरण में, हालांकि, मिडलवेयर केवल एक बार बनाया जाता है। तो अगर मैं इस तरह मिडलवेयर है:
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'
...