Django 与 Heroku

Django with Heroku

尝试在 .env 而不是 settings.py 文件中设置密钥时遇到问题

当我 运行 heroku 配置时,我得到了密钥

(portfolio) PS C:\Users\arund\Desktop\Code\Django\portfolio-project> heroku config:get SECRET_KEY
value

当我 运行 以下内容时出现错误。

(portfolio) PS C:\Users\arund\Desktop\Code\Django\portfolio-project> heroku local
[OKAY] Loaded ENV .env File as KEY=VALUE Format
1:53:57 PM web.1 |  Traceback (most recent call last):
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\manage.py", line 22, in <module>
1:53:57 PM web.1 |      main()
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\manage.py", line 18, in main
1:53:57 PM web.1 |      execute_from_command_line(sys.argv)
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\venv\lib\site-packages\django\core\management\__init__.py", line 419, in execute_from_command_line
1:53:57 PM web.1 |      utility.execute()
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\venv\lib\site-packages\django\core\management\__init__.py", line 395, in execute
1:53:57 PM web.1 |      django.setup()
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\venv\lib\site-packages\django\__init__.py", line 24, in setup
1:53:57 PM web.1 |      apps.populate(settings.INSTALLED_APPS)
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\venv\lib\site-packages\django\apps\registry.py", line 122, in populate
1:53:57 PM web.1 |      app_config.ready()
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\venv\lib\site-packages\django\contrib\admin\apps.py", line 27, in ready
1:53:57 PM web.1 |      self.module.autodiscover()
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\venv\lib\site-packages\django\contrib\admin\__init__.py", line 24, in autodiscover
1:53:57 PM web.1 |      autodiscover_modules('admin', register_to=site)
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\venv\lib\site-packages\django\utils\module_loading.py", line 47, in autodiscover_modules
1:53:57 PM web.1 |      import_module('%s.%s' % (app_config.name, module_to_search))
1:53:57 PM web.1 |    File "C:\Python39\lib\importlib\__init__.py", line 127, in import_module
1:53:57 PM web.1 |      return _bootstrap._gcd_import(name[level:], package, level)
1:53:57 PM web.1 |    File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
1:53:57 PM web.1 |    File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
1:53:57 PM web.1 |    File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
1:53:57 PM web.1 |    File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
1:53:57 PM web.1 |    File "<frozen importlib._bootstrap_external>", line 790, in exec_module
1:53:57 PM web.1 |    File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\venv\lib\site-packages\django\contrib\auth\admin.py", line 6, in <module>
1:53:57 PM web.1 |      from django.contrib.auth.forms import (
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\venv\lib\site-packages\django\contrib\auth\forms.py", line 11, in <module>
1:53:57 PM web.1 |      from django.contrib.auth.tokens import default_token_generator
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\venv\lib\site-packages\django\contrib\auth\tokens.py", line 117, in <module>
1:53:57 PM web.1 |      default_token_generator = PasswordResetTokenGenerator()
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\venv\lib\site-packages\django\contrib\auth\tokens.py", line 18, in __init__
1:53:57 PM web.1 |      self.secret = self.secret or settings.SECRET_KEY
1:53:57 PM web.1 |    File "C:\Users\arund\Desktop\Code\Django\portfolio-project\venv\lib\site-packages\django\conf\__init__.py", line 90, in __getattr__
1:53:57 PM web.1 |      raise ImproperlyConfigured("The SECRET_KEY setting must not be empty.")
1:53:57 PM web.1 |  django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
[DONE] Killing all processes with signal  SIGINT
1:53:57 PM web.1 Exited with exit code null

过程文件

Django 不会神奇地将环境变量应用于您的设置。你需要自己做,例如通过你的 settings.py:

这样的东西
import os

SECRET_KEY = os.getenv("SECRET_KEY", default="dev key")

在开发中,您可以使用 .env 文件来填充您的环境,但不应将该文件提交给版本控制。忽略它,并使用 Heroku's config vars instead。它们将被注入到您的应用程序环境中。