Скрытие паролей settings.py для развертывания Heroku Django

У меня есть конфиденциальные данные (пароли базы данных) в settings.py, и мне посоветовали загрузить мой проект Django в репозиторий github, прежде чем отправлять его в Heroku в разделе «Начало работы с Django на Heroku». Если я помещу settings.py в .gitignore, то, по-видимому, он не будет развернут с моим проектом. Как я могу предотвратить раскрытие settings.py, но при этом развернуть его вместе с моим проектом?


person J. Barca    schedule 28.09.2013    source источник
comment
Вы можете использовать разные ветки, см. stackoverflow.com/questions/10475273/.   -  person bennofs    schedule 29.09.2013
comment
Спасибо, я подумал об этом, но это звучало утомительно. Думаю, я нашел лучший способ сделать это - использовать переменные среды Heroku, как в devcenter.heroku .com / article / s3, а затем используйте os.config [имя_переменной], чтобы получить значение в settings.py. Очень удивлен, что это не проблема, более подходящая для Google ... может быть, это поможет   -  person J. Barca    schedule 29.09.2013
comment
Вам не нужно нажимать на github, просто на git. Это может быть даже локальный репозиторий git без пульта ДУ. В начале они просто предлагают установить общесистемный github .gitignore.   -  person esauro    schedule 29.09.2013


Ответы (2)


Вы можете использовать переменные среды (с heroku config:add SECRET=my-secret), чтобы настроить конфиденциальные данные и получить их в своих настройках с помощью:

SECRET = os.environ.get('SECRET', 'my-default-secret-key')

Если вы не хотите иметь возможность запускать приложение без настройки некоторых данных, используйте вместо этого следующий синтаксис:

SECRET = os.environ['SECRET']

Это вызовет исключение, если вы не установили переменную среды SECRET.

person sebastibe    schedule 29.09.2013
comment
Однако я нигде не могу найти синтаксис os.env, я считаю, что это: os.environ [HOME] - person J. Barca; 29.09.2013

Вам следует использовать инструмент, предназначенный для выделения конфиденциальных данных. Я использую YamJam https://pypi.python.org/pypi/yamjam/. Он позволяет использовать все преимущества метода os.environ, но проще - вам все равно нужно установить эти переменные среды, вам нужно будет поместить их где-нибудь в файл script / rc. YamJam устраняет эти вопросы и сохраняет эти настройки конфигурации в хранилище конфигураций вне проекта. Это позволяет вам иметь разные настройки для разработки, подготовки и производства.

  from YamJam import yamjam

  secret = yamjam()['myproject']['secret']

Это основное использование. И, как и метод os.environ, он не зависит от фреймворка, вы можете использовать его с Django или любым другим приложением / фреймворком. Я перепробовал их все, несколько файлов settings.py, хрупкую логику if / then и споры о среде. В итоге я перешел на ямджам и не пожалел.

person Dundee MT    schedule 03.05.2014
comment
Этот подход намного проще, чем создание переменных среды, и делает вещи немного более организованными, спасибо за ответ! - person Gabriel Belini; 16.10.2017