Django SECRET_KEY 设置不得为空,GitHub 工作流程。

7

我有一个针对Django的GitHub工作流程,当它进行数据库迁移时会出现错误。

django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.

秘钥存储在.env文件中,并通过以下方式进行加载。

from dotenv import load_dotenv
load_dotenv()
from pathlib import Path
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)
SECRET_KEY = os.getenv("secret_key")

以下是文件树

C:.
|   db.sqlite3
|   manage.py
|
\---djangosite
    |   .env
    |   asgi.py
    |   settings.py
    |   urls.py
    |   wsgi.py
    |   __init__.py
    |
    \---__pycache__
        ...

这是manage.py文件,它是普通的Django文件,并且从settings.py中加载.env代码。
#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
from dotenv import load_dotenv
load_dotenv()
from pathlib import Path
env_path = Path('.') / '.env'
load_dotenv(dotenv_path=env_path)
import os
import sys


def main():
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangosite.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()


当我在我的电脑上运行manage.py时,它加载密钥并运行服务器,但是在GitHub上会出现上述错误。如何停止出现这个错误?

你确定问题与你的.gitignore无关吗? - AzyCrw4282
不,.env 文件在 GitHub 上,并且有一个密钥。 - mmoomocow
你能同时更新你的文件层次结构manage.py吗? - AzyCrw4282
@AzyCrw4282 我已经添加了文件树和manage.py代码。 - mmoomocow
@smac89 在 GitHub 上的文件层次结构与我的电脑相同,唯一的区别是有一个名为 .vscode 的目录。工作流程是运行 python manage.py test - mmoomocow
显示剩余3条评论
3个回答

11
如果你已经将SECRET_KEY存储在系统的环境变量中,那么在GitHub的工作流程中,你可以在YAML文件中添加一个虚拟环境变量。 settings.py应该长这样。
import os
...
SECRET_KEY = os.environ.get('SECRET_KEY') # Or the name by which you stored environment variable
...
下面是步骤:
第一步:生成一个虚拟的 SECRET_KEY。您可以自行创建它。
import secrets
print(secrets.token_hex(25))

或者从像此类网站生成。

步骤2: 在您的 .github/workflows YAML 文件中(例如,django.yml),添加此内容。

steps:
...
- name: Run Tests
  env: 
    SECRET_KEY: your-genereated-secret_key
  run: |
    python manage.py test

在本地环境、生产环境和GitHub工作流程中,只要使用相同版本的代码,一切都将正常工作。


2

补充@PhysicistSouravDas的回答。你也可以这样做:

- name: Run Tests
    env:
    SECRET_KEY: ${{ secrets.SECRET_KEY }}
    run: |
        python manage.py test

现在,请前往您的GitHub存储库的设置。在secrets菜单下,单击Actions,然后单击New Repository Secret
使用名称SECRET_KEY和值为@PhysicistSouravDas建议的虚拟SECRET_KEY生成的方法添加一个新的密钥。
GitHub Actions将从那里获取SECRET_KEY

0
当您运行python manage.py runserver 8000时,您正在使用manage.py,它会将您的DJANGO_SETTINGS_MODULE设置为settings。在您的根目录中似乎没有settings.py文件,因此manage.py中的这一行代码:
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

应该变成:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "Your-App-Name.settings")

就像你的 wsgi.py 文件中一样。

你也可以在这里检查其他可能的解决方案


我刚刚添加了文件树,settings.py已经存在,我可以在我的电脑上运行服务器而没有错误。 - mmoomocow
你尝试过答案中的解决方案并查看这里的解决方案 https://dev59.com/Z-o6XIcBkEYKwwoYLhTO#20646241。这可能会出现无数种原因,所以您需要进行一些试错来解决问题。 - AzyCrw4282
在最糟糕的情况下,您可以在Github上的settings.py中将一个值设置为您的秘钥,这应该可以解决问题(当然)。 - AzyCrw4282
1
我已经按照你说的去做了,设置了一个值在settings.py中(KEY),然后我改变了readme文件(这是一个公开项目),让大家替换在settings.py中的key。 - mmoomocow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接