2009-06-13 6 views
5

रेल विकास पर्यावरण में, 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' 
    ... 

उत्तर

2

यह एक रेल बग प्रतीत होता है। देखें कि क्या आप अपने रेल संस्करण को 2.3.4 या 2.3.5 में अपग्रेड कर सकते हैं।

मुझे विश्वास है कि this वह समस्या है जो समस्या को हल करती है। मूल बग रिपोर्ट here है।

-1

हमें कुछ समय पहले आपके जैसी समस्या का सामना करना पड़ा। जहां तक ​​मुझे याद है कि पर्यावरण_आरबी में time_zone को सेट करके इसका उपचार किया जा सकता है: utc। यह थोड़ी देर पहले था और मुझे बिल्कुल कॉन्फ़िगर पैरामीटर नाम याद नहीं है या यह 'यूटीसी' या: utc था। इसे आज़माएं, शायद यह मदद करेगा।

संबंधित मुद्दे

 संबंधित मुद्दे