2

同じで構成された2つのwsgiアプリケーションを実行することを実験していますVirtualHost。アプリの1つは、ここでmyapp指定されている標準のhello-worldコードです。それは絶対にうまくロードされています。もう1つのアプリは、Djangoサイトです。で失敗します。uiappImportError

wsgi docsで、の値python-pathがに追加されていることを読んだので、これをforでsys.path指定しました。WSGIDaemonProcessuiapp

問題がPythonコードにあるのか、Apache構成にあるのかわかりません。

これは私の仮想ホスト構成です:

    [ . . . ]

    # processGroups
    WSGIProcessGroup uiapp
    WSGIProcessGroup myapp

    # configurations for django sites
    WSGIScriptAlias /uiapp "/some/path/ui_dir/site_prod/wsgi.py"
    WSGIScriptAlias /myapp "/some/other/path/myapp.wsgi"

    # daemons
    WSGIDaemonProcess uiapp processes=2 threads=25 display-name=site_prod_wsgi python-path=/some/path/ui_dir
    WSGIDaemonProcess myapp processes=2 threads=25 display-name=helloworld_wsgi

    # doc root for /uiapp
    <Directory "/some/path/ui_dir/site_prod">
        Order allow,deny
        Allow from all
    </Directory>

    # doc root for /myapp
    <Directory "/some/other/path">
        Order allow,deny
        Allow from all
    </Directory>

    [ . . . ]

python-pathforuiappをに変更しようとしまし/some/path/ui_dir/site_prodたが、それでも同じエラーで失敗します。

エラーログは次のとおりです。

 mod_wsgi (pid=32652): Exception occurred processing WSGI script '/some/path/ui_dir/site_prod/wsgi.py'.
 Traceback (most recent call last):
   File "/home/usr/local/lib/python2.7/site-packages/django/core/handlers/wsgi.py", line 219, in __call__
     self.load_middleware()
   File "/home/usr/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 39, in load_middleware
     for middleware_path in settings.MIDDLEWARE_CLASSES:
   File "/home/usr/local/lib/python2.7/site-packages/django/utils/functional.py", line 184, in inner
     self._setup()
   File "/home/usr/local/lib/python2.7/site-packages/django/conf/__init__.py", line 42, in _setup
     self._wrapped = Settings(settings_module)
   File "/home/usr/local/lib/python2.7/site-packages/django/conf/__init__.py", line 95, in __init__
     raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
 ImportError: Could not import settings 'site_prod.settings' (Is it on sys.path?): No module named site_prod.settings

これはのソースです/some/path/ui_dir/site_prod/wsgi.py

import os

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site_prod.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

# Apply WSGI middleware here.
# from helloworld.wsgi import HelloWorldApplication
# application = HelloWorldApplication(application)

私が間違っていることを理解するのを手伝ってください。

4

4 に答える 4

5

このように 2 つの WSGIProcessGroup ディレクティブを続けて使用することはできません。最後のみ使用します。したがって、実際には、両方のアプリケーションを異なるプロセス グループではなく、同じデーモン プロセス グループに送信しています。それを行い、それらを同じプロセスに置くと、次で説明されている setdefault() 問題が発生します。

WSGIProcessGroup ディレクティブを、それぞれの WSGI スクリプト ファイルの場所に関連する Directory ブロック内に移動します。

于 2012-11-23T21:23:35.497 に答える
1

以前のバージョンの django docs バージョン 1.4 ではなく 1.3 をチェックアウトすると、セクションHow to use Django with Apache and mod_wsgiが問題の解決に役立ちます。仮想ホストを構成したときに直面しているのと同じ問題に直面しました。したがってpython-path=/some/path/ui_dir、仮想ホスト構成で指定する代わりに。/some/path/ui_dir/site_prod/wsgi.py以下の行をそのファイルに追加することで実行できます。これらの行を、ファイルの先頭にある行の前に配置してから、django をインポートして実行します。

コード

import sys
path = '/some/path/ui_dir'
if path not in sys.path:
    sys.path.append(path)
于 2012-11-23T16:10:25.867 に答える
0

これを試して:

仮想ホスト:

<Virtualhost project.dev>
    DocumentRoot "/full/path/to/project/root/"

    WSGIScriptAlias / /full/path/to/wsgi/file/wsgi.py
</Virtualhost>

wsgi.py:

sys.path = ['path/to/project/root'] + sys.path
于 2012-11-23T18:35:31.917 に答える
0

...そして、wsgi.py で DJANGO_SETTINGS_MODULE を設定していることを確認してください

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings.could.be.somewhere.else'
于 2012-11-23T17:52:25.500 に答える