gpt4 book ai didi

python - DJANGO_SETTINGS_MODULE envar 未设置

转载 作者:行者123 更新时间:2023-12-01 02:26:35 26 4
gpt4 key购买 nike

我目前正在 Python 3.6 和 Django 1.11 中开发一个应用程序,在生产服务器 (Ubuntu 16.04) 上我使用的是 Apache2。

我正在尝试使用单独的设置进行生产和开发。我有一个包含基本设置的设置目录以及生产和开发设置文件,而不是文件,它导入基本设置并可能覆盖它们。为了让 Django 知道要使用哪些设置,我将 DJANGO_SETTINGS_MODULE 设置为 prehranske_oznacbe.settings.developmentprehranske_oznacbe.settings.Production。这对于开发来说效果很好。关于在生产服务器上设置环境变量,我遵循了这两个问题的答案: Access Apache SetEnv variable from Django wsgi.py file , Django + mod_wsgi. Set OS environment variable from Apache's SetEnv .

问题是,当我尝试访问我的应用程序时,收到 500 内部错误。 Apache 错误日志:

mod_wsgi (pid=404): Target WSGI script '/home/inesmersak/prehranske_oznacbe/prehranske_oznacbe/wsgi.py' cannot be loaded as Python module.
mod_wsgi (pid=404): Exception occurred processing WSGI script '/home/inesmersak/prehranske_oznacbe/prehranske_oznacbe/wsgi.py'.
Traceback (most recent call last):
File "/home/inesmersak/prehranske_oznacbe/prehranske_oznacbe/wsgi.py", line 25, in <module>
application = WSGIEnvironment()
File "/home/inesmersak/prehranske_oznacbe/venv/lib/python3.5/site-packages/django/core/handlers/wsgi.py", line 151, in __init__
self.load_middleware()
File "/home/inesmersak/prehranske_oznacbe/venv/lib/python3.5/site-packages/django/core/handlers/base.py", line 48, in load_middleware
if settings.MIDDLEWARE is None:
File "/home/inesmersak/prehranske_oznacbe/venv/lib/python3.5/site-packages/django/conf/__init__.py", line 56, in __getattr__
self._setup(name)
File "/home/inesmersak/prehranske_oznacbe/venv/lib/python3.5/site-packages/django/conf/__init__.py", line 39, in _setup
% (desc, ENVIRONMENT_VARIABLE))
django.core.exceptions.ImproperlyConfigured: Requested setting MIDDLEWARE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.

就好像环境变量 DJANGO_SETTINGS_MODULE 未设置。我的代码:

/etc/apache2/sites-available/000-default.conf

<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /static /home/inesmersak/prehranske_oznacbe/static
<Directory /home/inesmersak/prehranske_oznacbe/static>
Require all granted
</Directory>

<Directory /home/inesmersak/prehranske_oznacbe/prehranske_oznacbe>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

WSGIDaemonProcess prehranske_oznacbe python-path=/home/inesmersak/prehranske_oznacbe python-home=/home/inesmersak/prehranske_oznacbe/venv
WSGIProcessGroup prehranske_oznacbe
WSGIScriptAlias / /home/inesmersak/prehranske_oznacbe/prehranske_oznacbe/wsgi.py

# Envvars for Django aplication 'Prehranske oznacbe'.
SetEnv DJANGO_SETTINGS_MODULE prehranske_oznacbe.settings.production
SetEnv OZNACBE_API_USERNAME (redacted)
SetEnv OZNACBE_API_PASSWORD (redacted)
SetEnv OZNACBE_SECRET_KEY (redacted)
</VirtualHost>

wsgi.py

import os
import django
from django.core.handlers.wsgi import WSGIHandler


class WSGIEnvironment(WSGIHandler):
def __call__(self, environ, start_response):
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'prehranske_oznacbe.settings.production')
os.environ['DJANGO_SETTINGS_MODULE'] = environ['DJANGO_SETTINGS_MODULE']
os.environ['OZNACBE_SECRET_KEY'] = environ['OZNACBE_SECRET_KEY']
os.environ['OZNACBE_API_USERNAME'] = environ['OZNACBE_API_USERNAME']
os.environ['OZNACBE_API_PASSWORD'] = environ['OZNACBE_API_PASSWORD']
django.setup()
return super(WSGIEnvironment, self).__call__(environ, start_response)

application = WSGIEnvironment()

最佳答案

SetEnv 不会为 WSGI 应用程序设置进程范围的环境变量,它会设置通过请求将 environ 字典中传递给 WSGI 应用程序的每个请求 WSGI 环境变量。不过,WSGI 应用程序入口点是在 Django 初始化之后调用的,因此此时设置 os.environ 就为时已晚了。根据每个请求更新 os.environ 也被认为是不好的做法。使用单独的 WSGI 脚本文件更好。

# production.wsgi

import os

os.environ['DJANGO_SETTINGS_MODULE'] = '....'
....

from prehranske_oznacbe.wsgi import application

并让 WSGIScriptAlias 按路径引用 development.wsgi 文件。

关于python - DJANGO_SETTINGS_MODULE envar 未设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47327931/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com