これはおそらく WSGI/Apache の設定の問題だと思います。
mod_wsgi を使用して Apache を介して提供される Django Web サイトがあります。同じコードベースから別のドメイン、データベース、および settings.py を介して 2 つ目の Web サイトを実行しようとしています。
私の WSGI 構成ファイルは、正しい個別の settings.py ファイルをロードしているようです。ただし、2 番目のドメインが新しいデータベースではなく元のデータベースからデータをロードしているように見えます。これは、Apache がセットアップされている本番環境でのみ発生しています。
私の settings.py ファイルは、common.py というファイルを介して共通情報をロードしてから、データベース名をロードします。
いえ
settings1.py
from common import *
DATABASES['default']['NAME'] = 'database1'
...
settings2.py
from common import *
DATABASES['default']['NAME'] = 'database2'
...
これらの設定は、それぞれの WSGI ファイルから読み込まれます。
www.domain1.com -> index1.wsgi:
import os, sys
sys.path.insert(0,'/location/to/code/')
sys.path.insert(0,'/location/to/code/application')
sys.path.insert(0,'/virtual/env/python2.7/site-packages/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'application.settings1'
os.environ['PYTHON_EGG_CACHE'] = '/location/to/.python-eggs'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
www.domain2.com -> index2.wsgi:
import os, sys
sys.path.insert(0,'/location/to/code/')
sys.path.insert(0,'/location/to/code/application')
sys.path.insert(0,'/virtual/env/python2.7/site-packages/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'application.settings2'
os.environ['PYTHON_EGG_CACHE'] = '/location/to/.python-eggs'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
ご覧のとおり、設定場所を変更しただけです。コードの位置はそのままです。settings1.py と settings2.py のプロパティにより、サーバー上の静的ファイルの保存と読み込みの場所が変わっていることから、この部分が機能していると確信しています。ただし、アプリケーションが呼び出す情報は、www.domain2.com から呼び出された場合でも、database1 から取得されます。そのデータベース名は、common.py ではなく、settings1.py でのみ使用できるため、これがどのように可能になったのかさえわかりません。誰でもこの問題について何か洞察がありますか?
編集:
ドメインをそれぞれの WSGI ファイルに誘導する Apache インクルードを追加しています。NGINXにポート80でリッスンさせ、関連するリクエストをApacheに転送しているため、仮想ホストはローカルホストでリッスンすることに注意してください。
AddHandler wsgi-script .wsgi
NameVirtualHost 127.0.0.1:80
Listen 127.0.0.1:80
<IfModule mod_wsgi.c>
<VirtualHost 127.0.0.1:80>
ServerName domain1.com
ServerAlias www.domain1.com
ErrorDocument 500 "We are experiencing difficulties. Please contact webmaster@domain1.com if you feel you are receiving this page in error."
WSGIScriptAlias / /path/to/index1.wsgi
Alias /static/ /path/to/static_files/static/
WSGIDaemonProcess djangodomain1 python-path=/virtual/env/python2.7/site-packages processes=8 threads=4 display-name=%{GROUP}
WSGIProcessGroup djangodomain1
WSGIApplicationGroup %{GLOBAL}
ExpiresActive On
ExpiresDefault "access plus 10 days"
ExpiresByType text/css "access plus 1 second"
ExpiresByType text/js "access plus 1 second"
ServerAdmin webmaster@domain1.com
UseCanonicalName Off
CustomLog /path/to/logs/access_log combined
CustomLog /path/to/domlogs/domain1.com-bytes_log "%{%s}t %I .\n%{%s}t %O ."
ErrorLog /path/to/logs/error_log
## User group1 # Needed for Cpanel::ApacheConf
<IfModule mod_suphp.c>
suPHP_UserGroup group1 group1
</IfModule>
<IfModule !mod_disable_suexec.c>
SuexecUserGroup group1 group1
</IfModule>
</VirtualHost>
<VirtualHost 127.0.0.1:80>
ServerName domain2.com
ServerAlias www.domain2.com
ErrorDocument 500 "We are experiencing difficulties. Please contact webmaster@domain1.com if you feel you are receiving this page in error."
WSGIScriptAlias / /path/to/index2.wsgi
Alias /static/ /path/to/static/
WSGIDaemonProcess djangodomain2 python-path=/virtual/env/python2.7/site-packages processes=8 threads=4 display-name=%{GROUP}
WSGIProcessGroup djangodomain2
WSGIApplicationGroup %{GLOBAL}
ExpiresActive On
ExpiresDefault "access plus 10 days"
ExpiresByType text/css "access plus 1 second"
ExpiresByType text/js "access plus 1 second"
ServerAdmin webmaster@domain1.com
UseCanonicalName Off
CustomLog /path/to/logs/domain2/access_log combined
CustomLog /path/to/domlogs/domain2.com-bytes_log "%{%s}t %I .\n%{%s}t %O ."
ErrorLog /path/to/logs/domain2/error_log
## User group1 # Needed for Cpanel::ApacheConf
<IfModule mod_suphp.c>
suPHP_UserGroup group1 group1
</IfModule>
<IfModule !mod_disable_suexec.c>
SuexecUserGroup group1 group1
</IfModule>
</VirtualHost>