tl; dr:
В приведенной ниже конфигурации Apache путается с контекстом интерпретатора Python. У меня есть три демонстрационных сайта, развернутых с использованием этой настройки, и если вы часто обновляете их, возникает состояние гонки, и некоторые тексты / изображения, поступающие из БД, смешиваются друг с другом.
vhost conf:
<VirtualHost *:80>
ServerName demo.motion-m.ca
ServerAlias *.demo.motion-m.ca
Options FollowSymLinks
UseCanonicalName Off
VirtualDocumentRoot /var/www/vhosts/%0
RewriteEngine On
RewriteMap lowercase int:tolower
LogFormat "%{Host}i %h %u %t \"%r\" %s %b" vcommon
CustomLog /var/log/apache2/demo.motion-m.ca vcommon
# Handle everything except the static/media
RewriteCond %{REQUEST_URI} !^/(media|static)/(.*)$
RewriteRule ^/(.*) /var/www/vhosts/%{HTTP_HOST}/apache/django.wsgi/$1
RewriteRule . - [E=APPLICATION_GROUP:${tolower:%{SERVER_NAME}}]
# Use the subdomain as unique ApplicationGroup/Process identifier
# or experience funny results
RewriteCond %{ENV:REDIRECT_SUBDOMAIN} =""
RewriteCond %{HTTP_HOST} ([a-z0-9][-a-z0-9]+)\.demo.motion-m\.ca\.?(:80)?$ [NC]
RewriteCond %{DOCUMENT_ROOT}/%1 -d
RewriteRule ^(.*) %1/$1 [E=SUBDOMAIN:%1,L]
RewriteRule ^ - [E=SUBDOMAIN:%{ENV:REDIRECT_SUBDOMAIN},L]
# use the "website" part as group name
WSGIProcessGroup %{ENV:SUBDOMAIN}
WSGIApplicationGroup %{ENV:SUBDOMAIN}
<Location ~ /(media|static)/(.*)>
Order deny,allow
Options -Indexes
Allow from all
</Location>
<Directory /var/www/vhosts/*/apache>
Order allow,deny
Allow from all
Options ExecCGI
AddHandler wsgi-script .wsgi
</Directory>
</VirtualHost>
django.wsgi
import os, sys, site
site.addsitedir('/usr/lib/python2.5/site-package')
os.environ['DJANGO_SETTINGS_MODULE'] = 'projectname.settings'
path = os.path.dirname(os.path.abspath(os.path.join(__file__, '../../')))
if path not in sys.path:
sys.path.insert(0, '/var/www/vhosts/website.demo.motion-m.ca/')
sys.path.insert(0, '/var/www/vhosts/website.demo.motion-m.ca/projectname/')
sys.path.insert(2, '/path/to/django-1.3')
sys.path.insert(3, '/path/to/django-1.3/django')
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
Любые идеи ?
Спасибо
Следующее кажется мне неправильным:
WSGIApplicationGroup %{ENV:SUBDOMAIN}
Почему есть:
RewriteRule . - [E=APPLICATION_GROUP:${tolower:%{SERVER_NAME}}]
если вы не используете APPLICATION_GROUP.
Кстати, вы использовали:
http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Embedded_Or_Daemon_Mode http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Sub_Interpreter_Being_Used
для проверки независимо от Django, что группа процессов исполняемого демона и субинтерпретатор выбираются для соответствующих хостов / URL-адресов.