![](/img/trans.png)
[英]Django: The SECRET_KEY setting must not be empty even if it exists in settings
[英]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.