【问题标题】:Django + Heroku: KeyError when accessing Heroku's config varsDjango + Heroku:访问 Heroku 的配置变量时出现 KeyError
【发布时间】:2020-06-03 04:34:16
【问题描述】:

我正在尝试通过following this page 从 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

是什么导致了这个错误?是否与转义特殊字符有关?

【问题讨论】:

    标签: django heroku environment-variables sendgrid


    【解决方案1】:

    我认为您无法访问它们,因为它们不在那个环境中(这意味着它们不在您的正常环境中)。 要访问这些 .env 配置变量,您可以使用 python-decouple(install it) 并像这样访问这些变量:

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

    我希望这对你有用

    【讨论】:

    • 所有的环境变量都在.env,如果这就是你所说的正常环境的话。另外,很确定pypi.org/project/python-dotenv 更适合这个。
    • (.env 很好)不,我指的是你在 heroku 上的项目环境。试试上面的一个来解决它
    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-07-12
    • 2023-04-05
    • 1970-01-01
    • 2021-07-21
    • 2015-03-01
    • 2019-02-05
    相关资源
    最近更新 更多