Git - Push для развертывания и удаления конфигурации Dev - PullRequest
1 голос
/ 28 января 2012

Итак, я пишу приложение для Facebook с использованием Rails и размещено на Heroku.

В Heroku вы развертываете, отправляя репо на сервер.

Когда я сделаю это, я бы хотел, чтобы он автоматически изменил несколько настроек разработчика (например, секрет Facebook) на производственные настройки.

Какой лучший способ сделать это? Git крючок?

Ответы [ 2 ]

4 голосов
/ 28 января 2012

Существует несколько распространенных практик для решения этой ситуации, если вы не хотите использовать перехватчики Git или другие методы для изменения реального кода при развертывании.

Конфигурация на основе среды

Если вы не возражаете против того, чтобы производственные значения были указаны в вашей конфигурации в вашем хранилище, вы можете сделать их основанными на среде. Я иногда использую что-то вроде этого:

# config/application.yml

default:
  facebook:
    app_id: app_id_for_dev_and_test
    app_secret: app_secret_for_dev_and_test
    api_key: api_key_for_dev_and_test

production:
  facebook:
    app_id: app_id_for_production
    app_secret: app_secret_for_production
    api_key: api_key_for_production

# config/initializers/app_config.rb

require 'yaml'

yaml_data = YAML::load(ERB.new(IO.read(File.join(Rails.root, 'config', 'application.yml'))).result)

config = yaml_data["default"]
begin
  config.merge! yaml_data[Rails.env]
rescue TypeError
  # nothing specified for this environment; do nothing
end

APP_CONFIG = HashWithIndifferentAccess.new(config)

Теперь вы можете получить доступ к данным, например, с помощью APP_CONFIG[:facebook][:app_id], и значение будет автоматически отличаться в зависимости от среды, в которой было загружено приложение.

Конфигурация на основе переменных среды

Другой вариант - указать производственные данные через переменные среды. Heroku позволяет вам сделать это через config vars .

  1. Настройте свой код на использование значения в зависимости от среды (возможно, с дополнительными значениями по умолчанию):

    facebook_app_id = ENV['FB_APP_ID'] || 'some default value'
    
  2. Создайте производственную конфигурацию var на Heroku, набрав в консоли:

    heroku config:add FB_APP_ID=the_fb_app_id_to_use
    

Теперь ENV['FB_APP_ID'] - the_fb_app_id_to_use в производстве (Heroku) и 'some default value' в разработке и тестировании.

В приведенной выше документации Heroku содержится более подробная информация об этой стратегии.

0 голосов
/ 28 января 2012

Вы можете изучить идею фильтра содержимого , основанного на сценарии 'smudge', автоматически выполняемом при оформлении заказа .

content filter

Вы бы заявили:

  • некоторые (версии) шаблон файлы
  • некоторые файлы значений
  • a (версионный) скрипт smudge, способный распознавать среду выполнения и генерировать необходимые (не версионные) конечные файлы из файлов значений или (для более конфиденциальной информации) из других источников, внешних по отношению к репозиторию Git. *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...