मुझे अपने रेल एप्लिकेशन के लिए एक विन्यास विकल्प बनाने की आवश्यकता है यह सभी वातावरणों के लिए समान हो सकता है। मुझे पता चला कि अगर मैं इसे environment.rb
में environment.rb
हूं। environment.rb
, यह मेरे विचारों में उपलब्ध है, जो वही है जो मुझे चाहिए …
environment.rb AUDIOCAST_URI_FORMAT = http://blablalba/blabbitybla/yadda
बहुत अच्छा काम करता है।
हालांकि, मैं थोड़ा असहज हूँ। क्या यह करने का एक अच्छा तरीका है? क्या एक तरीका है जो अधिक कूल्हे है?
सामान्य अनुप्रयोग कॉन्फ़िगरेशन के लिए जिसे डेटाबेस तालिका में संग्रहीत करने की आवश्यकता नहीं है, मैं config निर्देशिका के भीतर एक config.yml
फ़ाइल बनाना चाहूंगा। आपके उदाहरण के लिए, यह इस तरह दिख सकता है:
defaults: &defaults audiocast_uri_format: http://blablalba/blabbitybla/yadda development: <<: *defaults test: <<: *defaults production: <<: *defaults
यह कॉन्फ़िगरेशन फ़ाइल कस्टम / initializers में कस्टम initializer से लोड हो जाती है :
# Rails 2 APP_CONFIG = YAML.load_file("#{RAILS_ROOT}/config/config.yml")[RAILS_ENV] # Rails 3+ APP_CONFIG = YAML.load_file(Rails.root.join('config/config.yml'))[Rails.env]
यदि आप रेल 3 का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आप गलती से अपने रिश्तेदार कॉन्फ़िग पथ पर एक अग्रणी स्लैश नहीं जोड़ते हैं।
तब आप का उपयोग करके मूल्य प्राप्त कर सकते हैं:
uri_format = APP_CONFIG['audiocast_uri_format']
पूरे विवरण के लिए यह रेलस्कास्ट देखें।
रेलिंग 3 प्रारंभिक कोड के संस्करण निम्न प्रकार हैं (आरआरआईआर_आरओटी और आरएआरएस_एएनवीवी पदावनत है)
APP_CONFIG = YAML.load_file(Rails.root.join('config', 'config.yml'))[Rails.env]
इसके अलावा, रूबी 1.9.3 साइक का इस्तेमाल करता है, जो मर्ज कुंजियों को संवेदनशील बना देता है, इसलिए आपको अपनी कॉन्फ़िग फाइल को उस खाते में लेने के लिए बदलना होगा, उदा।
defaults: &DEFAULTS audiocast_uri_format: http://blablalba/blabbitybla/yadda development: <<: *DEFAULTS test: <<: *DEFAULTS production: <<: *DEFAULTS
रेल 5, रेल 4.2
बस config/
निर्देशिका में एक YAML
फ़ाइल बनायें, उदाहरण के लिए: config/neo4j.yml
neo4j.yml
सामग्री नीचे की तरह neo4j.yml
हो सकती है (सादगी के लिए, मैंने सभी वातावरणों के लिए डिफ़ॉल्ट इस्तेमाल किया था):
default: &default host: localhost port: 7474 username: neo4j password: root development: <<: *default test: <<: *default production: <<: *default
config/application.rb
:
module MyApp class Application < Rails::Application config.neo4j = config_for(:neo4j) end end
अब, आपकी कस्टम कॉन्फ़िग नीचे की तरह पहुंच योग्य है:
Rails.configuration.neo4j['host'] #=>localhost Rails.configuration.neo4j['port'] #=>7474
और जानकारी
रेलिंग आधिकारिक एपीआई दस्तावेज़ config_for
पद्धति का वर्णन करता है:
मौजूदा रेल env के लिए config / foo.yml लोड करने के लिए सुविधा
यदि आप एक yaml
फ़ाइल का उपयोग नहीं करना चाहते हैं
जैसा कि आधिकारिक गाइड रेल कहते हैं:
आप
config.x
संपत्ति के अंतर्गत कस्टम कॉन्फ़िगरेशन के साथ रेल विन्यास ऑब्जेक्ट के माध्यम से अपना स्वयं का कोड कॉन्फ़िगर कर सकते हैं।
उदाहरण
config.x.payment_processing.schedule = :daily config.x.payment_processing.retries = 3 config.x.super_debugger = true
ये कॉन्फ़िगरेशन पॉइंट कॉन्फ़िगरेशन ऑब्जेक्ट के माध्यम से उपलब्ध होते हैं:
Rails.configuration.x.payment_processing.schedule # => :daily Rails.configuration.x.payment_processing.retries # => 3 Rails.configuration.x.super_debugger # => true Rails.configuration.x.super_debugger.not_set # => nil
config_for
विधि के लिए आधिकारिक संदर्भ | आधिकारिक रेल गाइड
चरण 1: config / initializers / appconfig.rb बनाएँ
require 'ostruct' require 'yaml' all_config = YAML.load_file("#{Rails.root}/config/config.yml") || {} env_config = all_config[Rails.env] || {} AppConfig = OpenStruct.new(env_config)
चरण 2: config / config.yml बनाएं
common: &common facebook: key: 'asdjhasxas' secret : 'xyz' twitter: key: 'asdjhasxas' secret : 'abx' development: <<: *common test: <<: *common production: <<: *common
चरण 3: कोड में कहीं भी स्थिरांक प्राप्त करें
facebook_key = AppConfig.facebook['key'] twitter_key = AppConfig.twitter['key']
मैं सिर्फ 4.2 और 5 पटरियों में नवीनतम कूल स्टफ के लिए इसे अपडेट करना चाहता था, अब आप अपने किसी भी config/**/*.rb
फ़ाइलों में यह कर सकते हैं:
config.x.whatever = 42
(और वह वहां एक शाब्दिक x
है, अर्थात config.x.
शाब्दिक रूप से होना चाहिए, और फिर आप x
बाद जो चाहें जोड़ सकते हैं)
… और यह आपके ऐप में उपलब्ध होगा:
Rails.configuration.x.whatever
यहां अधिक देखें: http://guides.rubyonrails.org/configuring.html#custom-configuration
इस विषय पर बस कुछ अतिरिक्त जानकारी:
APP_CONFIG = YAML.load_file(Rails.root.join('config', 'config.yml'))[Rails.env].with_indifferent_access
".with_indifferent_access" आपको स्ट्रिंग कुंजी का उपयोग करने वाले या समकक्ष प्रतीक कुंजी के साथ हैश में मानों तक पहुंचने की अनुमति देता है।
जैसे।
APP_CONFIG['audiocast_uri_format'] => 'http://blablalba/blabbitybla/yadda'
APP_CONFIG[:audiocast_uri_format] => 'http://blablalba/blabbitybla/yadda'
APP_CONFIG['audiocast_uri_format'] => 'http://blablalba/blabbitybla/yadda'
APP_CONFIG[:audiocast_uri_format] => 'http://blablalba/blabbitybla/yadda'
पूरी तरह से एक सुविधा बात है, लेकिन मैं अपनी चाबियाँ प्रतीकों के रूप में प्रतिनिधित्व करने के लिए पसंद करते हैं।
मैं रेल 3.0 / 3.1 के लिए जॉन के समान कुछ उपयोग करता हूं, लेकिन मुझे पहले फ़ाइल को पार्स करना है:
APP_CONFIG = YAML.load(ERB.new(File.new(File.expand_path('../config.yml', __FILE__)).read).result)[Rails.env]
इससे मुझे अपने कॉन्फ़िग में ERB का उपयोग करने की इजाजत दी जाती है अगर मुझे हेओकोक की रेडिस्टोगो यूआरएल पढ़ने की ज़रूरत है:
production: <<: *default redis: <%= ENV['REDISTOGO_URL'] %>
Rails 4
एक कस्टम विन्यास यमल बनाने के लिए और इसे लोड करें (और अपने ऐप पर उपलब्ध कराएं) जैसे डेटाबेस_संरचना
*.yml
बनाएँ, मेरे मामले में मुझे एक redis विन्यास फाइल की जरूरत है
config/redis.yml
default: &default host: localhost port: 6379 development: <<: *default test: <<: *default production: <<: *default host: <%= ENV['ELASTICACHE_HOST'] %> port: <%= ENV['ELASTICACHE_PORT'] %>
फिर विन्यास लोड करें
config/application.rb
module MyApp class Application < Rails::Application ## http://guides.rubyonrails.org/configuring.html#initialization-events config.before_initialize do Rails.configuration.redis_configuration = YAML.load_file("#{Rails.root}/config/redis.yml") end end end
मूल्यों तक पहुंचें:
Rails.configuration.redis_configuration[Rails.env]
समान रूप से आप Rails.configuration.database_configuration[Rails.env]
द्वारा अपने database.yml
तक पहुंच प्राप्त कर सकते हैं Rails.configuration.database_configuration[Rails.env]
ओमर असलम के सुरुचिपूर्ण समाधान पर बिल्डिंग, मैंने कुंजी को प्रतीकों में बदलने का फैसला किया। केवल परिवर्तन है:
all_config = YAML.load_file("#{Rails.root}/config/config.yml").with_indifferent_access || {}
यह आपको चाबियों के रूप में प्रतीकों द्वारा मूल्यों को संदर्भित करने देता है, जैसे
AppConfig[:twitter][:key]
यह मेरी आँखों से साफ दिखता है
(उत्तर के रूप में पोस्ट किया गया क्योंकि मेरी प्रतिष्ठा ओमेर के उत्तर पर टिप्पणी करने के लिए पर्याप्त नहीं है)
मुझे simpleconfig पसंद है यह आपको हर पर्यावरण कॉन्फ़िगरेशन की अनुमति देता है
आवेदन पैरामीटर को स्टोर करने के लिए सबसे अच्छी जगह कहां से मेरी प्रतिक्रिया देखें : डेटाबेस, फ़ाइल, कोड …?
आपके पास क्या भिन्नता है कि यह दूसरी फ़ाइल का एक सरल संदर्भ है यह देखता है कि पर्यावरण। आरबी लगातार अद्यतन नहीं है और उसमें ऐप विशिष्ट सामान का एक ढेर नहीं है। यद्यपि आपके प्रश्न का कोई विशिष्ट उत्तर नहीं है, 'क्या यह रेल मार्ग है?', शायद इस बारे में कुछ चर्चा होनी चाहिए।
मैं वैश्विक अनुप्रयोग स्टैक के माध्यम से सेटिंग्स तक पहुंच पसंद करता हूं। मैं स्थानीय क्षेत्र में अतिरिक्त वैश्विक चर से बचना
config / initializers / myconfig.rb
MyAppName::Application.define_singleton_method("myconfig") {YAML.load_file("#{Rails.root}/config/myconfig.yml") || {}}
और इसके साथ प्रवेश करें।
MyAppName::Application.myconfig["yamlstuff"]
आपको रेल इनिशियलाइज़ेशन में सेटिंग्स का उपयोग करने और पर्यावरण प्रति सेटिंग्स कॉन्फ़िगर करने की अनुमति देता है
# config/application.rb Bundler.require(*Rails.groups) mode = ENV['RAILS_ENV'] || 'development' file = File.dirname(__FILE__).concat('/settings.yml') Settings = YAML.load_file(file).fetch(mode) Settings.define_singleton_method(:method_missing) {|name| self.fetch(name.to_s, nil)}
आप दो तरीकों से सेटिंग प्राप्त कर सकते हैं: सेटिंग्स ['ईमेल'] या सेटिंग्स.ईमेल
कस्टम कॉन्फ़िग का मेरा सबसे अच्छा तरीका, raise message के साथ जब set.yml गुम है
config / initializers / custom_config.rb में कस्टम initializer से लोड हो जाता है
setting_config = File.join(Rails.root,'config','setting.yml') raise "#{setting_config} is missing!" unless File.exists? setting_config config = YAML.load_file(setting_config)[Rails.env].symbolize_keys @APP_ID = config[:app_id] @APP_SECRET = config[:app_secret]
Config / setting.yml में एक YAML बनाएँ
development: app_id: 433387212345678 app_secret: f43df96fc4f65904083b679412345678 test: app_id: 148166412121212 app_secret: 7409bda8139554d11173a32222121212 production: app_id: 148166412121212 app_secret: 7409bda8139554d11173a32222121212