Tengo varios archivos de configuración en mi proyecto Django (base.py, local.py, production.py).
Localmente, estoy iniciando el servidor de desarrollo de Django a través de
python manage.py runserver --settings=config.settings.local¿Cómo puedo decirle a mod_wsgi que use el mismo archivo? Estoy probando esto en mi instancia de apache local, pero tendré que averiguar lo mismo para mi instancia de apache de producción.
--settings=config.settings.productionhttpd-vhosts.conf actual:
WSGIDaemonProcess secureDash python-path=/Users/user/projects/secureDash_project/secureDash python-home=/Users/user/.venvs/securedash_py3.6 WSGIProcessGroup secureDash WSGIScriptAlias / /Users/user/projects/secureDash_project/config/wsgi.pyError que veo en el registro de apache:
ModuleNotFoundError: No module named 'secureDash.settings'Django 1.11
mod_wsgi-4.5.15
apache 2.4.18
Para ello, configure la variable de entorno DJANGO_SETTINGS_MODULE. Puede hacer esto en su configuración de Apache vhost o en el propio archivo wsgi.
Resolví esto agregando DJANGO_SETTINGS_MODULE a mi archivo secrets.json en cada entorno.
secretos.json:
{ "FILENAME": "secrets.json", "SECRET_KEY": "someSuperSecretiveSecret!", "DJANGO_SETTINGS_MODULE": "config.settings.local" }wsgi.py:
import json from django.core.exceptions import ImproperlyConfigured from pathlib import Path ... # Directory Paths BASE_DIR = Path(__file__).resolve().parent # JSON-based secrets module SECRETS_JSON = str(BASE_DIR) + '/secrets.json' with open(SECRETS_JSON) as f: secrets = json.loads(f.read()) def get_secret(setting, secrets=secrets): '''Get the secret variable or return explicit exception''' try: return secrets[setting] except KeyError: error_msg = 'Set the {0} environment variable'.format(setting) raise ImproperlyConfigured(error_msg) DJANGO_SETTINGS_MODULE = get_secret('DJANGO_SETTINGS_MODULE') os.environ.setdefault("DJANGO_SETTINGS_MODULE", DJANGO_SETTINGS_MODULE)