Rails 3 - я делаю конфигурационные файлы слишком сложными? - PullRequest
0 голосов
/ 17 июля 2011

Я простой парень - мне просто нужен конфигурационный файл 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 другим способом (возможно, внутри самого модуля)?

Кажется, я слишком усложняю ..

Ответы [ 2 ]

2 голосов
/ 17 июля 2011

Вы делаете это немного сложнее, чем нужно. Вам нужно только 2 вещи:

Ваше conifg: /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/initializers/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 голосов
/ 17 июля 2011

Я использую configatron Марка Бейтса, он такой же, как подход AppConfig, но он позволяет использовать ERB в YAML и может помочь в использовании пространств имен:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...