- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在 Python 3.6 和 Django 1.11 中开发一个应用程序,在生产服务器 (Ubuntu 16.04) 上我使用的是 Apache2。
我正在尝试使用单独的设置进行生产和开发。我有一个包含基本设置的设置目录以及生产和开发设置文件,而不是文件,它导入基本设置并可能覆盖它们。为了让 Django 知道要使用哪些设置,我将 DJANGO_SETTINGS_MODULE 设置为 prehranske_oznacbe.settings.development
或 prehranske_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/
我目前正在 Python 3.6 和 Django 1.11 中开发一个应用程序,在生产服务器 (Ubuntu 16.04) 上我使用的是 Apache2。 我正在尝试使用单独的设置进行生产和开发。我
我真的在这里尝试过,但我对 postgrs、java 和 heroku 有点陌生。我的实时实例运行良好。我通过导出旧的转储文件和 pg_restoring 来设置本地数据库。我似乎无法设置 DATAB
我是一名优秀的程序员,十分优秀!