Rails инициализатор для разработки и производства - PullRequest
17 голосов
/ 12 мая 2010

У меня есть следующий код в /config/initializers/chargify.rb

Chargify.configure do |c|
  c.subdomain = 'example'
  c.api_key   = '123xyz'
end

Но у меня разные настройки для разработки и производства.

Итак, как бы я имел другой набор значений переменных в зависимости от среды?

Ответы [ 4 ]

29 голосов
/ 12 мая 2010

Я бы создал файл конфигурации для этого (config/chargify.yml):

development:
  subdomain: example
  api_key: 123abc
production:
  subdomain: production_domain
  api_key: 890xyz

А затем измените свой инициализатор следующим образом:

chargify_config_file = File.join(Rails.root,'config','chargify.yml')
raise "#{chargify_config_file} is missing!" unless File.exists? chargify_config_file
chargify_config = YAML.load_file(chargify_config_file)[Rails.env].symbolize_keys

Chargify.configure do |c|
  c.subdomain = chargify_config[:subdomain]
  c.api_key   = chargify_config[:api_key]
end
5 голосов
/ 12 января 2011

А как же:

Chargify.configure do |c|
  if Rails.env.production?
    # production settings
    c.api_key   = '123xyz'
  else
    # dev. and test settings
    c.api_key   = '123xyz'
  end
end

Еще лучше, вы можете уменьшить дублирование с помощью блока case:

Chargify.configure do |c|
  c.subdomain = 'example'
  c.api_key   = case
    when Rails.env.production?
      '123xyz'
    when Rails.env.staging?
      'abc123'
    else
      'xyz123'
    end
end
4 голосов
/ 12 мая 2010

Если вам понадобятся разные настройки для разных сред, лучше всего поместить их в соответствующий файл среды, например config/environments/development.rb.

Если вы абсолютно настаиваете на том, чтобы поместить их в инициализатор (но, пожалуйста, не делайте этого, для этого предназначены файлы среды), вы можете использовать оператор case и проверить значение Rails.env, которое возвращает имя текущей среды в виде строки.

0 голосов
/ 04 мая 2017

Я бы предложил вам использовать переменные env

Chargify.configure do |c|
  c.subdomain = ENV['APP_SUBDOMAIN']
  c.api_key = ENV['API_KEY']
end

и установите соответствующие переменные в ~ / .bashrc или ~ / .profile но обратите внимание: это должно быть установлено для того же пользователя, на котором работает экземпляр Rails. Например. пользователь развертывания, указанный в capistrano, используется вами для развертываний

...