मेरा मानना है कि आपको कॉन्फ़िगर/application.rb के लिए आपकी अपेक्षाओं के पीछे क्या थोड़ा सा गलत विचार है। ActiveRecord :: बेस और ActiveController :: बेस eigenclasses रेल :: अनुप्रयोग :: कॉन्फ़िगरेशन क्लास का उपयोग करें जो config/application.rb में कॉन्फ़िगर किया गया है। गुण कक्षाओं में उपलब्ध नहीं हैं जो बेस कक्षाओं में से किसी एक से निकलते हैं, न ही उनके eigenclasses। यही कारण है कि आप ApplicationController में त्रुटियों में चल रहे हैं।
रेल ऐप में कॉन्फ़िगरेशन प्रारंभ करने के लिए आम तौर पर दो तरीके हैं। पहला तरीका प्रारंभकर्ता के माध्यम से इसे में एक विन्यास मॉड्यूल और फिर भार मूल्यों बनाने के लिए है:
सबसे पहले, एक Twiter कॉन्फ़िग मॉड्यूल बनाने के लिए:
# config/twitter.yaml
development: &base
key: "foo"
secret: "bar"
test:
<<: *base
key: "foo2"
production:
<<: *base
secret: "barbar"
:
#lib/twitter_config.rb
module TwitterConfig
def self.config
@@config ||= {}
end
def self.config=(hash)
@@config = hash
end
end
एक YAML कॉन्फ़िग फ़ाइल बनाएं वैकल्पिक रूप से, यदि आप अपने एससीएम में config/twitter.yaml जोड़ने का इरादा नहीं रखते हैं, तो आप इसे छोड़ सकते हैं और पर्यावरण चर के माध्यम से कुंजी और गुप्त सेट कर सकते हैं। हेरोोकू पर तैनात सार्वजनिक एससीएम भंडार के साथ एक आवेदन के लिए यह सुझाया गया समाधान होगा।
फिर से लोड और एक प्रारंभकर्ता के माध्यम से मान सेट:
#config/initializers/01_twitter.rb
require 'twitter_config'
TwitterConfig.config = YAML.load_file("config/config.yml")[Rails.env].symbolize_keys
यह आम तौर पर के रूप में रेल उनके फ़ाइल नाम के अनुसार क्रम में उन्हें लोड होगा अपने प्रारंभकर्ता फ़ाइलों नंबर एक अच्छी आदत है। यदि आप डेटास्टोर शुरू कर रहे हैं और यह अन्य चरणों के लिए महत्वपूर्ण है, तो इसे सबसे कम संख्या की आवश्यकता है। वैकल्पिक रूप से, अगर आप वातावरण चर का उपयोग कर रहे, इस init फ़ाइल होगा:
#config/initializers/01_twitter.rb
require 'twitter_config'
TwitterConfig.config[:key] = ENV['twitter_config_key']
TwitterConfig.config[:secret] = ENV['twitter_config_secret']
रेल आवेदन के दौरान, अब आप TwitterConfig.config साथ config मूल्यों के लिए उपयोग किया [: कुंजी] & TwitterConfig.config [: गुप्त]। आप मॉड्यूल भी शामिल कर सकते हैं, केवल विवादों के लिए देखें।
आप मूल्यों को वैश्विक स्थिरता के रूप में भी लोड कर सकते हैं। यह मेरे लिए एक सा बदसूरत महसूस करता है, हालांकि:
#config/application.rb
TWITTER_CONFIG = YAML.load_file("config/twitter.yaml")[Rails.env]
खूनी अच्छा जवाब, बहुत बहुत धन्यवाद। –
यह विकास सर्वर में शून्य करने के लिए चर को रीसेट करें! –
मुझे रूबी 1.9.2-पी 180 के साथ रेल 3.1 ऐप पर काम करने में कुछ परेशानी हो रही है। मेरे आवेदन में, अगर मैं TwitterConfig.method को कॉल करना चाहता था, तो यह मुझे बस एक त्रुटि देगा। हालांकि, अगर मैं TwitterConfig.instance_methods का निरीक्षण करता हूं, तो मैं स्पष्ट रूप से परिभाषित विधियों को देख सकता हूं। – Emerson