2010-05-12 2 views
17

У меня есть следующий код в /config/initializers/chargify.rbRails инициализатор для разработки и производства

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

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

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

ответ

29

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

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

А затем измените Initializer так:

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 
+1

Быстрое предупреждение для всех, кто вырезает и вставляет сверху: 'sudomain: example' должен быть' subdomain: example' –

4

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

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

+0

Комментарии в приложении.rb для * не * помещают конфигурацию в эти файлы и помещают их в файлы в каталоге инициализаторов. –

5

насчет:

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 
0

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^