【发布时间】:2015-01-14 18:31:01
【问题描述】:
我需要拆分 Django 的开发和生产设置。我决定如果设置了USKOVTASK_PROD 变量,那么应用程序应该使用生产设置。我阅读了this 的文章并尝试这样做。
我的sn-ps:
/etc/apache2/sites-enabled/uskovtask.conf:
<VirtualHost *:80>
ServerName uskovtask.*.com
ServerAlias uskovtask.*.com
DocumentRoot /mnt/ebs/uskovtask
Alias /static /mnt/ebs/uskovtask/static/
<Directory /mnt/ebs/uskovtask/static>
Require all granted
</Directory>
#WSGIPythonPath /mnt/ebs/uskovtask
WSGIDaemonProcess uskovtask.*.com python-path=/mnt/ebs/uskovtask:/usr/lib/python2.7/site-packages
WSGIProcessGroup uskovtask.*.com
WSGIScriptAlias / /mnt/ebs/uskovtask/uskovtask/wsgi.py
SetEnv USKOVTASK_PROD 1
<Directory /mnt/ebs/uskovtask/uskovtask>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
wsgi.py:
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "uskovtask.settings")
from django.core.wsgi import get_wsgi_application
_application = get_wsgi_application()
def application(environ, start_response):
if 'USKOVTASK_PROD' in environ:
os.environ.setdefault('USKOVTASK_PROD', environ['USKOVTASK_PROD'])
return _application(environ, start_response)
settings.py 部分:
import os
if 'USKOVTASK_PROD' in os.environ:
from settings_prod import *
else:
from settings_dev import *
但它总是导入 settings_dev 的设置。为什么?
【问题讨论】:
-
能否调试并验证 USKOVTASK_PROD 是否真的设置在 os.environ 中?您可以为此放置一个简单的打印件。
-
@iamkhush USKOVTASK_PROD 如果我在
wsgi.py中打印它,它在 os.enivron 中,但不在settings.py中 -
您能否通过在其后放置 print 来验证语句“if 'USKOVTASK_PROD' in environ”是否为真。
-
@iamkhush 是假的
-
好的,那么很明显问题在于 apache conf 文件没有正确设置变量。
标签: python django apache mod-wsgi