Django SECRET_KEY 设置在 github 工作流中不能为空

mmo*_*cow 5 python django github-actions

我有一个 Django 的 GitHub 工作流程,当它迁移数据库时,它给出了错误

django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
Run Code Online (Sandbox Code Playgroud)

密钥存储在.env文件中并加载

django.core.exceptions.ImproperlyConfigured: The SECRET_KEY setting must not be empty.
Run Code Online (Sandbox Code Playgroud)

这是文件树

C:.
|   db.sqlite3
|   manage.py
|
\---djangosite
    |   .env
    |   asgi.py
    |   settings.py
    |   urls.py
    |   wsgi.py
    |   __init__.py
    |
    \---__pycache__
        ...
Run Code Online (Sandbox Code Playgroud)

这是 manage.py,它是常规的 django,从 settings.py 加载 .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")
Run Code Online (Sandbox Code Playgroud)

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

Phy*_*Das 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
...
Run Code Online (Sandbox Code Playgroud)

步骤如下:

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

import secrets
print(secrets.token_hex(25))
Run Code Online (Sandbox Code Playgroud)

或者从这样的网站生成。

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

steps:
...
- name: Run Tests
  env: 
    SECRET_KEY: your-genereated-secret_key
  run: |
    python manage.py test
Run Code Online (Sandbox Code Playgroud)

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