簡體   English   中英

Django站點中的ImportError,在守護程序模式下使用mod_wsgi

[英]ImportError in Django site with mod_wsgi in Daemon mode

我正在嘗試運行在同一VirtualHost上配置的兩個wsgi應用程序。 myapp應用程序之一是此處指定的標准hello-world代碼。 它加載完全正常。 另一個應用程序uiapp是Django網站。 它失敗,並顯示ImportError

我在wsgi docs中閱讀到, python-path值附加到sys.path ,這就是我在WSGIDaemonProcessuiapp指定的uiapp

我不知道問題出在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>

    [ . . . ]

我試圖將uiapppython-path uiapp/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)

請幫助我弄清楚我在做什么錯。

您不能像這樣連續兩個WSGIProcessGroup指令。 僅使用最后一個。 因此,您實際上是將兩個應用程序發送到同一守護進程組,而不是不同的應用程序。 完成此操作並使它們處於相同的過程中,您遇到的setdefault()問題描述如下:

將WSGIProcessGroup指令移至與各自WSGI腳本文件位置有關的Directory塊內。

如果您查看django docs版本1.3而不是1.4的先前版本,則如何將Django與Apache和mod_wsgi結合使用可以幫助解決您的問題。 配置虛擬主機時,我遇到了與您同樣的問題。 因此,不要在您的virtualhost配置中指定python-path=/some/path/ui_dir 您可以在/some/path/ui_dir/site_prod/wsgi.py執行以下操作,將以/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)

...並確保您已在wsgi.py中設置DJANGO_SETTINGS_MODULE

os.environ['DJANGO_SETTINGS_MODULE'] = 'settings.could.be.somewhere.else'

嘗試這個:

虛擬主機:

<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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM