Django Параметр SECRET_KEY не должен быть пустым с рабочим процессом github - PullRequest
2 голосов
/ 08 мая 2020

У меня есть рабочий процесс GitHub для Django, и когда он доходит до миграции базы данных, он выдает ошибку

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 с кодом загрузки .env из settings.py

#!/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 на своем P C, он загружает ключ и запускает сервер, но GitHub выдает ошибку, указанную выше. Как мне предотвратить появление этой ошибки?

Ответы [ 2 ]

1 голос
/ 08 мая 2020

Когда вы запускаете python manage.py runserver 8000, вы используете manage.py, который является настройкой от DJANGO_SETTINGS_MODULE до settings. Не похоже, что у вас есть settings.py в вашем каталоге root, поэтому эта строка в manage.py:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")

должна стать:

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

как вы есть в вашем файле wsgi.py.

Вы также можете проверить здесь другие возможные решения .

0 голосов
/ 19 августа 2020

Если вы сохранили SECRET_KEY в переменной среды вашей системы, то для рабочего процесса GitHub вы можете добавить фиктивную переменную среды в файл YAML.

The 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.

...