2010-07-15 76 views
3

我試圖讓Django和Apache的共同努力使用mod_wsgi的,目前我收到以下錯誤:Django和Apache的問題

[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] mod_wsgi (pid=4803): Target WSGI script '/home/webdev/websites/virtualenvs/polaris/polaris_project.py' cannot be loaded as Python module. 
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] mod_wsgi (pid=4803): Exception occurred processing WSGI script '/home/webdev/websites/virtualenvs/polaris/polaris_project.py'. 
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] Traceback (most recent call last): 
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] File "/home/webdev/websites/virtualenvs/polaris/polaris_project.py", line 8, in <module> 
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73]  import django.core.handlers.wsgi 
[Thu Jul 15 12:52:38 2010] [error] [client 10.100.50.73] ImportError: No module named django.core.handlers.wsgi 

我的Apache的conf看起來像

Alias /polaris_django/media/ "/home/webdev/websites/virtualenvs/polaris/polaris/static/" 
WSGIScriptAlias /polaris_django /home/webdev/websites/virtualenvs/polaris/polaris_project.py 
WSGIApplicationGroup %{GLOBAL} 

<Directory "/home/webdev/websites/virtualenvs/polaris"> 
     Order deny,allow 
     Allow from all 
</Directory> 

我mod_wsgi的文件看起來像

import os, sys 

sys.path.append('/home/webdev/websites/virtualenvs/polaris') 
sys.path.append('/home/webdev/websites/virtualenvs/polaris/polaris/apps') 
sys.path.append('/home/webdev/websites/virtualenvs/polaris/polaris/extra_settings') 
os.environ['DJANGO_SETTINGS_MODULE'] = 'polaris.settings' 
print >> sys.stderr, sys.path 
import django.core.handlers.wsgi 

application = django.core.handlers.wsgi.WSGIHandler() 

我怎樣才能獲得Apache服務的Django是否正確?

回答

5

它看起來像你使用的是virtualenv - 你需要在你的WSGI腳本中激活它來設置正確的路徑。

activate_this = os.path.join("path/to/my/virtualenv", "bin/activate_this.py") 
execfile(activate_this, dict(__file__=activate_this)) 
2

它看起來像Django不在你的路徑...你可以發佈你的sys.path的值?

+0

[。 ..'/usr/lib/python2.6','/usr/lib/python2.6/plat-linux2','/usr/lib/python2.6/lib-tk','/ usr/lib/python2 .6/lib-old','/usr/lib/python2.6/lib-dynload','/usr/lib/python2.6/dist-packages','/usr/lib/pymodules/python2.6' ,'/usr/lib/pymodules/python2.6/gtk-2.0','/usr/local/lib/python2.6/dist-packages','/ home/webdev/websites/virtualenvs/polaris/pysrc/a pps','/ home/webdev/websites/virtualenvs/polaris/pysrc/extra_settings','/ home/webdev/websites/virtualenvs/polaris/pysrc'] – silent1mezzo 2010-07-15 18:47:01

+0

此外,如果我使用python polaris.wsgi,它可以正常工作。我也改變了polaris - > pysrc – silent1mezzo 2010-07-15 18:48:33

1

我猜apache正在使用不同版本的python或使用不同的sys.path。你作爲sys.path的輸出得到什麼?

1

Django在哪裏安裝?從命令行Python的事情:

import django 
print django.__file__ 

如果沒有下/usr/lib/python2.6或/usr/local/lib/python2.6安裝在相應的目錄上sys.path中,然後就是問題。

假設你確實安裝了Django,這可能是因爲你有多個已安裝的Python版本,並且你使用了不同的mod_wsgi來安裝Django。或者你使用了一個虛擬環境,並沒有告訴mod_wsgi它在哪裏。或者您設法使用Apache無法讀取的權限安裝Django。

前去觀看演講的視頻,並通過在引用的幻燈片閱讀:

http://blog.dscpl.com.au/2010/06/sydney-pycon-modwsgi-talk-slides.html

它們涵蓋了這類問題,以及很多其他的東西與權限等