2012-11-16 16 views
7

इस तरह एक ठेठ config/environments/*.rb फ़ाइल शुरू होता है:कैसे config प्रतीक वातावरण में हल हो गई है/* rb

MyApp::Application.configure do 
    config.cache_classes = false 
    ... 
end 

ब्लॉक configure के लिए पारित प्रतीक config जो जाहिरा तौर पर अबाध है dereferences। यह तकनीकी रूप से कैसे काम करता है? ब्लॉक/प्रो/लैम्ब्डा में उपयोग किए गए प्रतीकों को इसकी घोषणा के संदर्भ में बाध्य किया जाना चाहिए, कॉल साइट पर गतिशील दायरे में हल नहीं किया जाना चाहिए।

एक संबंधित प्रश्न है, जहां Application.configure विधि घोषित की गई है? यह application.rb, engine.rb, या railtie.rb में नहीं है। शायद अगर मैं इस विधि को ढूंढने में कामयाब रहा, तो मुझे अपने मुख्य प्रश्न का उत्तर मिल गया होगा।

इसके अलावा, मैंने Rails initialization procedure का अध्ययन किया है, और मुझे config/environments/*.rb फ़ाइल का उल्लेख भी नहीं मिला है। अगर मुझे पता था कि इन फ़ाइलों को इनिट प्रक्रिया द्वारा कैसे इलाज किया गया था, जो इस पर कुछ प्रकाश डाल सकता है।

उत्तर

2

यह lib/rails/application.rb में railties मणि जो Application::Configuration का एक उदाहरण देता है, lib/rails/application/configuration.rb में परिभाषित में एक विधि configRails::Application में है।

विधि configureautoload एड मॉड्यूल Configurable, lib/rails/railtie/configurable से Railtie के लिए योगदान दिया है, और

def configure(&block) 
    class_eval(&block) 
end 

जो बताता है कि क्यों ब्लॉक कि configureconfig प्रतीक हल कर सकते हैं स्वीकार करता है के रूप में परिभाषित किया गया है। ध्यान दें कि class_eval रूबीस्ट जादू का एक और टुकड़ा है जो यह काम करता है: यह कॉल साइट के वर्ग में पास-इन ब्लॉक के self प्रतीक को पुनर्निर्मित करता है।

बूटिंग प्रक्रिया अनुभाग में पहली फ़ाइल में टिप्पणियों की जांच करें, जो बताता है कि /config/environments निर्देशिका कैसे संसाधित की जाती है, यह कहां, कैसे और किस क्रम में आती है।

+0

मैंने उस फ़ाइल को चेक किया है [यहां] (https://raw.github.com/rails/rails/b04ec2764f62d5734c57959e2f00f9ef4345d52e/railties/lib/rails/application.rb), लेकिन 'कॉन्फ़िगरेशन' की खोज कुछ भी नहीं बताती है। क्या मैं गलत संस्करण देख रहा हूं? –

+0

स्पष्ट होने के लिए, मुझे 'config' मिल सकता है, लेकिन यह यह नहीं समझाता है कि ब्लॉक' कॉन्फ़िगर 'पर कैसे पारित किया गया है, उस विधि को इसके घोषणा संदर्भ से देख सकता है। मैं 'कॉन्फ़िगरेशन' विधि की तलाश में हूं, जिसे 'ENV.rb' से कहा जा रहा है। –

+1

'lib/rails/Railtie/configurable # config' मुख्य विधि है जिसे इस विधि को 'def कॉन्फ़िगर (& block) के रूप में परिभाषित किया गया है; class_eval (और ब्लॉक); end.' - तो वह ब्लॉक है जिसे आप ढूंढ रहे हैं, है ना? –

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