Rails3-我是不是让配置文件太复杂了



我是个简单的人——我只想要一个可以从控制器访问的YAML配置文件。仅此而已。

首先,我创建了config/app_config.yml,其中包含我想要的配置值。到目前为止,一切都很好。

然后,在中,我创建了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(可能在模块本身内部(?

我好像把事情搞得太复杂了。。

你让它变得比需要的复杂一点。你只需要两件事:

您的针叶树:/config/config.yml(应该看起来像这样,当然这些只是占位符(

development: &DEVELOPMENT
  host_name: "localhost:3000"
  api_username: test@example.com
  api_pass: password
  api_key: 12345
test:
  <<: *DEVELOPMENT
cucumber:
  <<: *DEVELOPMENT
staging:
  host_name: "my-staging-staging.heroku.com"
  api_username: test@example.com
  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: test@example.com
  api_pass: password
  api_key: 12345
  s3:
    bucket: bucket-name
    access_key_id: secret_key_id
    secret_access_key: secret_key

然后您的初始值设定项:/config/iinitializers/app_config.rb

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

现在,您可以通过AppConfig从任何地方访问配置中的任何内容。例如,在任何环境中获取主机名都是:

AppConfig[:host_name]

如果我们在本地运行,该值将是"localhost:3000">

我使用Mark Bates的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

最新更新