Django + Heroku: KeyError при доступе к конфигурационным переменным Heroku - PullRequest
0 голосов
/ 19 февраля 2020

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

import os

from dotenv import load_dotenv
from boto.s3.connection import S3Connection
# ...
load_dotenv(verbose=True)
# ...
s3 = S3Connection(os.environ['SECRET_KEY'],
                  os.environ['DATABASE_URL'],
                  os.environ['SENDGRID_API_KEY'])
SECRET_KEY = os.getenv('SECRET_KEY')
# ...

if os.environ.get('DEBUG') is None:
    DEBUG = False
else:
    DEBUG = True
# ...
# Sending emails
SENDGRID_API_KEY = os.getenv('SENDGRID_API_KEY')

EMAIL_HOST = 'smtp.sendgrid.net'
EMAIL_HOST_USER = 'apikey'
EMAIL_HOST_PASSWORD = SENDGRID_API_KEY
EMAIL_PORT = 587
EMAIL_USE_TLS = True
# ...

Я хочу иметь локальный .env, содержащий эти переменные, и использовать конфигурационные переменные Heroku в производстве. Но при развертывании я получаю Application Error, и это результат heroku logs --tail:

2020-02-19T04:09:27.730183+00:00 app[web.1]: File "/app/smart_toilet_system/settings.py", line 34, in <module>
2020-02-19T04:09:27.730183+00:00 app[web.1]: os.environ['SENDGRID_API_KEY'])
2020-02-19T04:09:27.730183+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/boto/s3/connection.py", line 194, in __init__
2020-02-19T04:09:27.730184+00:00 app[web.1]: validate_certs=validate_certs, profile_name=profile_name)
2020-02-19T04:09:27.730184+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.7/site-packages/boto/connection.py", line 502, in __init__
2020-02-19T04:09:27.730185+00:00 app[web.1]: self.port = PORTS_BY_SECURITY[is_secure]
2020-02-19T04:09:27.730185+00:00 app[web.1]: KeyError: '<SENDGRID_API_KEY>'
2020-02-19T04:09:27.730911+00:00 app[web.1]: [2020-02-19 04:09:27 +0000] [10] [INFO] Worker exiting (pid: 10)
2020-02-19T04:09:27.838786+00:00 app[web.1]: [2020-02-19 04:09:27 +0000] [4] [INFO] Shutting down: Master
2020-02-19T04:09:27.839030+00:00 app[web.1]: [2020-02-19 04:09:27 +0000] [4] [INFO] Reason: Worker failed to boot.
2020-02-19T04:09:28.081341+00:00 heroku[web.1]: State changed from up to crashed
2020-02-19T04:09:28.062132+00:00 heroku[web.1]: Process exited with status 3

Что вызывает эту ошибку? Это связано с экранированием специальных символов?

1 Ответ

0 голосов
/ 19 февраля 2020

Я думаю, что вы не можете получить к ним доступ, потому что они не находятся в этой среде (это означает, что они не находятся в вашей обычной среде). Для доступа к этим переменным .env config вы можете использовать python -decouple (установить его) и обращаться к этим переменным следующим образом:

from decouple import config
s3 = S3Connection(config('SECRET_KEY'),
              config('DATABASE_URL'),
              config('SENDGRID_API_KEY'))

Надеюсь, это проснется для вас

...