2011-07-17 12 views
0

私は単純な人です。コントローラーからアクセスできるYAML設定ファイルがほしいだけです。それで全部です。Rails 3 - 設定ファイルを複雑にしていますか?

まず、config/app_config.ymlを作成しました。これには設定値が含まれています。ここまでは順調ですね。その後

、Iに含まれ、lib/app_config.rbを作成しました:

module AppConfig 
    def self.config 
    @@config ||= {} 
    end 

    def self.config=(config) 
    @@config = config 
    end 
end 

は最後に、私が含まれ、config/initializers/load_app_config.rbを作成しました:

# the ./ is necessary for some reason, though no examples online use it... 
require './lib/app_config' 

AppConfig.config = YAML.load_file("#{Rails.root.to_s}/config/app_config.yml") 

私は完全にload_app_config.rbをスキップして、他のいくつかの方法をAppConfig.config割り当てる必要があります(おそらくモジュール自体の内部に)?

私はそれがあまりにも複雑になってるようです。..

答えて

2

あなたはそれが必要以上に、それはもう少し複雑になっています。

あなたconifg:/config/config.yml (もちろん、これらは単なるプレースホルダーです、このようになります)

development: &DEVELOPMENT 
    host_name: "localhost:3000" 
    api_username: [email protected] 
    api_pass: password 
    api_key: 12345 
test: 
    <<: *DEVELOPMENT 
cucumber: 
    <<: *DEVELOPMENT 
staging: 
    host_name: "my-staging-staging.heroku.com" 
    api_username: [email protected] 
    api_pass: password 
    api_key: 12345 
    s3: 
    bucket: bucket-name 
    access_key_id: secret_key_id 
    secret_access_key: secret_key 
production: 
    host_name: "my-production.heroku.com" 
    api_username: [email protected] 
    api_pass: password 
    api_key: 12345 
    s3: 
    bucket: bucket-name 
    access_key_id: secret_key_id 
    secret_access_key: secret_key 

次に、あなたの初期化子:/ configに/初期化子/あなただけの2つのことを必要としますapp_config.rb

AppConfig = YAML.load(File.read(Rails.root + 'config' + 'config.yml'))[Rails.env].with_indifferent_access 

今、あなたはのAppConfig経由でどこからでも設定あなたから何かをアクセスすることができます。どんな環境でホスト名をつかむためにたとえば、あなたがしている次のようになります。

AppConfig[:host_name] 

我々はローカルで実行していた場合、その値は「localhostを:3000」になり

+0

これは私の最初のアプローチでした。しかし、私がこれを試してみると、私のコントローラから 'AppConfig'にアクセスすると、初期化されていない定数エラーが発生します。私はもう一度試してみて、同じエラーを受けました。 'AppConfig'は特別な場所で定義されていますか? – ClosureCowboy

+0

AppConfigはapp_config.rbで定義されています。イニシャライザが実行されると、イニシャライザが使用可能になります。イニシャライザが正しくロードされているかどうかを調べるには、YAML.load(Files.read(Rails.root + 'config' + 'config.yml'))を設定してみてください。[Rails.env] .with_indifferent_accessそれを 'config'などに割り当てることができます。 config [:attribute] –

+0

にアクセスしてみてください。/ libにあるものの代わりに/ config/initializersにapp_config.rbがあることを確認することもできます –

0

私はマーク・ベイツによってconfigatronを使用し、それはですAppConfigのアプローチと同じですが、YAMLでERBを使用することができ、名前空間の使用に役立ちます。

configatron.website_url = "http://www.mackframework.com" 
configatron.email.pop.address = "pop.example.com" 
configatron.email.pop.port = 110 
configatron.email.smtp.address = "smtp.example.com" 
configatron.email.smtp.port = 25 
関連する問題