2015-01-14 3 views
1

В моей собственной системе cms у меня есть файл конфигурации, который не зарегистрирован в git (т. Е. Он указан в .gitignore), но мне нужно будет иметь эту конфигурацию файл доступен на сервере.Heroku PHP development - Лучшая практика для работы с конфигурационным файлом

Какова наилучшая практика для этого в среде Heroku?

+0

У вас была возможность взглянуть на ответ? – dzuelke

ответ

1

У вас есть несколько вариантов, которые сразу приходят на ум; представленные здесь в порядке предпочтения от самых сильных до самых низких:

  1. Использовать config vars. Они будут доступны в $_ENV или через getenv(), и это самый портативный подход. Если вы добавите надстройку на Heroku, соответствующая информация будет настроена как config vars, чтобы вы могли читать ее из среды во время выполнения. Например, когда вы heroku addons:add heroku-postgresql, там будете DATABASE_URL конфигурации вара, который выглядит примерно так:

    $ heroku config | grep DATABASE_URL 
    DATABASE_URL: postgres://user3123:[email protected]:6212/db982398 
    

    Вы можете прочитать эту информацию из окружающей среды, и разобрать его как URL, чтобы определить все детали соединения:

    $dbinfo = parse_url(getenv("DATABASE_URL")); 
    

    То же самое относится к любому дополнению. Если вы добавите надстройку RedisToGo из хранилища надстроек, у вас будет env var с информацией о подключении. Если вы добавите надстройку Mandrill, у вас будет MANDRILL_APIKEY, который вы можете использовать для взаимодействия с API.

    Это рекомендуется Twelve-Factor practice и имеет три очень явные преимущества:

    1. если вы хотите/необходимость изменить настройки конфигурации, то вам не придется повторно reploy приложение
    2. вы можете развернуть тот же код без изменений, например (также см. функцию heroku fork), не говоря уже о локальных средах разработчиков, поскольку они отличаются только в их конфигурационных версиях
    3. иногда, значения конфигурационных варов могут меняться. Например, the Heroku Postgres HA feature may cause the value of DATABASE_URL to change. Если вы скорректируете значение в своем приложении, оно исчезнет, ​​когда это произойдет, и вам придется повторно развернуть. Если вы динамически во время выполнения читаете от getenv("DATABASE_URL"), вы будете в безопасности.

    Помните, что вы можете установить любой config var самостоятельно, например. heroku config:set FOO=bar, а затем $foo = getenv("FOO") или $foo = $_ENV["FOO"] (первое имеет преимущество не бросать уведомление, если переменная/ключ не существует, поэтому вы можете сделать $foo = getenv("FOO")?:"default value").

  2. использовать что-то вроде IncenteevParameterHandler

  3. Используйте composer compile step, чтобы скопировать/переместить config.php-dist в config.php (или аналогичный) в течение git push heroku master

  4. Сделайте то же самое, что и выше, но с использованием Composer post-install-cmd; однако, это будет выполняться каждый раз, когда кто-то делает composer install, так что это, вероятно, не то, что вы хотите.

  5. Удалить конфиг из .gitignore :)

P.S. Только опция №1 считывает конфигурационные файлы во время выполнения, поэтому вы автоматически сохраняете в случае изменения значения var var.

+0

Благодарим вас за ссылку на mandrill, так как это то, что мы собираемся использовать в этом проекте. – jaycode

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