簡體   English   中英

Django SECRET_KEY 設置不能為空 github 工作流程

[英]Django SECRET_KEY setting must not be empty with github workflow

我有一個 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 的 load.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()

當我在我的 PC 上運行manage.py時,它會加載密鑰並運行服務器,但是 GitHub 給出了上述錯誤。 如何阻止此錯誤發生?

如果您已將SECRET_KEY存儲在系統的環境變量中,那么對於 GitHub 工作流程,您可以在 YAML 文件中添加一個虛擬環境變量。

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))

或者從這樣的網站生成。

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

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

然后,在您的本地環境、生產環境和 GitHub 工作流程中使用相同版本的代碼,一切都會正常工作。

添加到@PhysicistSouravDas 的答案。 您也可以這樣做:

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

現在,將 go設置GitHub 存儲庫的設置。 secrets菜單下,單擊Actions ,然后單擊New Repository Secret

添加一個名為SECRET_KEY的新密鑰,其值為由@PhysicistSouravDas 建議的方法生成的虛擬 SECRET_KEY。

GitHub Actions 將從那里獲取 SECRET_KEY。

當您運行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文件中所做的那樣。

您還可以在此處查看其他一些可能的解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM