【问题标题】:Django SECRET_KEY setting must not be empty with github workflowDjango SECRET_KEY 设置在 github 工作流中不能为空
【发布时间】:2020-08-23 11:23:41
【问题描述】:

我有一个 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,它是从settings.py 加载.env 代码的常规django 代码

#!/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()

当我在我的 PC 上运行 manage.py 时,它会加载密钥并运行服务器,但 GitHub 给出了上述错误。 如何阻止此错误发生?

【问题讨论】:

  • 您确定问题与您的.gitignore无关?
  • 你是什么意思@AzyCrw4282
  • 您是否将您的.env 文件包含在.gitignore 文件中?
  • 不,.env 在 GitHub 中并且有一个密钥
  • 你能更新你的file hierarchymanage.py吗?

标签: python django github-actions


【解决方案1】:

如果您已将SECRET_KEY 存储在系统的环境变量中,那么对于 GitHub 工作流程,您可以在 YAML 文件中添加一个 dummy 环境变量。

settings.py 应如下所示

import os
...
SECRET_KEY = os.environ.get('SECRET_KEY') # Or the name by which you stored environment variable
...

步骤如下:

第 1 步: 生成一个虚拟 SECRET_KEY。您可以自己创建它

import secrets
print(secrets.token_hex(25))

或者从像this这样的网站生成。

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

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

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

【讨论】:

    【解决方案2】:

    当您运行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 文件中所做的那样。

    您也可以在这里查看其他可能的solutions

    【讨论】:

    • 我刚刚添加了文件树,settings.py 存在,我可以在我的 PC 上运行服务器而不会出错
    • 您是否尝试过答案中的解决方案,并在此处查看解决方案 stackoverflow.com/a/20646241/2532070 。发生这种情况的原因有很多,因此您必须进行一些试验和错误才能解决问题
    • 在更糟糕的情况下,您可以简单地在 Github 上的 settings.py 中为您的密钥设置一个值,这应该可以解决它(当然)。
    • 我已经按照你说的做了,并在 settings.py (KEY) 中设置了一个值,然后我将自述文件(它是一个公共项目)更改为替换 settings.py 中的密钥
    猜你喜欢
    • 2021-06-18
    • 1970-01-01
    • 2017-06-04
    • 1970-01-01
    • 2013-10-08
    • 2016-12-25
    • 2017-10-03
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多