2016-07-18 3 views
2

Я развиваюсь на Heroku, используя переменные config для хранения чувствительных и других переменных окружения. При локальном развитии я отразил эти переменные в файле .env.Экологические переменные из файла .env недоступны во время локальных миграций в django, heroku

Что я сейчас вижу, переменные из файла .env не загружаются во время миграции. Они загружаются при запуске локального веб-сервера с heroku local, но НЕ загружают для миграции. Это не было проблемой, в то время как мое локальное приложение все еще использовало базу данных sqlite3 по умолчанию, потому что база данных по умолчанию sqlite была «жестко закодирована» в файле настроек. Однако недавно я хочу использовать локальную базу данных Postgresql для локального разработчика. ОК, поэтому я добавил переменную DATABASE_URL в файл .env.

Я не могу заставить свое локальное приложение перейти на БД. Я выяснил, что это связано с тем, что содержимое .env не добавлено в перенаправление отображения .

Чтобы проверить, я добавил переменную тест на .env файла:

TEST="teeeest" 

Тогда в settings.py:

import os 
import dj_database_url 

if "TEST" not in os.environ: 
    raise Exception("No .env vars found.") 

Я попытался python manage.py migrate:

Файл «/ Users/apple/heroku/b/b/settings.py ", строка 16, в raise Exception (" Нет .vvv vars found. ") Исключение: нет .env vars найдено.

Однако я могу запустить heroku local и нет ошибок. Я также провел дополнительное тестирование, чтобы гарантировать, что переменные .env доступны во время heroku local.

По разным причинам я хочу установить свою локальную строку подключения DB в файле .env, но на данный момент это кажется невозможным. Это правильное поведение для джанго на героку? .env переменные файла доступны только при запуске сервера, а не для переноса?

ответ

1

manage.py ничего не знает о вашем файле .env. Вам нужно будет запустить команду под тем, что делает; либо Foreman, что и сам Heroku, либо Honcho, что является реализацией Python.

+1

Я на самом деле просто понял это после долгого weekend-> 'Heroku МЕСТНЫЙ: питон manage.py migrate'. https://devcenter.heroku.com/articles/heroku-local#run-your-app-locally-using-the-heroku-local-command-line-tool-run-a-one-off-command-locally –

5

Я, наконец, понял, что просто бег python manage.py migrate ничего не сделал, чтобы загрузить переменные файла .env. Вы должны делать запускать команды в heroku local среде:

heroku local:run python manage.py migrate 

https://devcenter.heroku.com/articles/heroku-local#run-your-app-locally-using-the-heroku-local-command-line-tool-run-a-one-off-command-locally