Переменные локального окружения Heroku Python
Работа над проектом heroku django.
Цель: Я хочу запускать сервер локально с тем же кодом и на облаке (имеет смысл).
Проблема:
Окружение отличается на сервере linux (heroku) и локальном ПК с системой windows.
Локальные переменные окружения отличаются от конфигурационных переменных облачного Heroku.
Конфигурационные переменные Heroku можно легко настроить с помощью CLI heroku config:set TIMES=2
.
Пока настройка локальных env vars является полной неразберихой.
Я попробовал сделать следующее в cmd:
py -c "import os;os.environ['Times']=2"
# To set an env var
Затем выполнил py -c "import os;os.environ.get('Times','Not Found')"
stdout: "Not Found".
После небольшого исследования оказалось, что такие env vars хранятся временно в зависимости от использования процесса/сессии.
Итак, мне пришла в голову идея использовать файл .env
. Я бы хотел, чтобы os.environ
перенаправлялся в .env
файл корневого проекта heroku вместо PC env vars. Поэтому я нашел этот инструмент direnv, идеально подходящий для Unix-подобных ОС, но недоступный для Windows.
views.py
код (работает идеально на облаке, болеет на локальной машине):
import os
import requests
from django.shortcuts import render
from django.http import HttpResponse
from .models import Greeting
def index(request):
# get method takes 2 parameters (env_var_string,return value if var is not found)
times = int(os.environ.get('TIMES',3))
return HttpResponse('<p>'+ 'Hello! ' * times+ '</p>')
def db(request):
greeting = Greeting()
greeting.save()
greetings = Greeting.objects.all()
return render(request, "db.html", {"greetings": greetings})
Главный вопрос: Есть ли правильный способ скрыть секреты локально в windows и получить к ним доступ по os.environ['KEY']
?
Другая теория решения: Мне интересно, имеет ли виртуальная среда python свои собственные переменные окружения? Если да, то я активирую venv локально, не затрагивая облако. Поэтому os.environ['KEY']
перенаправляется на переменные venv. Опять же, это всего лишь теория.
Вы можете использовать переменные окружения, которые можно получить через os.environ['KEY']
.
Один и тот же код будет работать как на локальной разработке, так и на Heroku.
На Heroku эти переменные определяются с помощью ConfigVars heroku config:set KEY=val
, а локально (например, на Windows) те же переменные определяются в файле .env
(используйте dotenv для их загрузки). Файл .env
никогда не фиксируется вместе с исходным кодом.