2012-12-06 112 views
2

我想部署Django(位於virtualenv)在Apache上使用WSGI部署。我下面從https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/Django Apache的wsgi virtualenv導入錯誤

wsgi.py默認教程(着Django生成的默認之一,評論丟棄):

import os 

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

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

apache2.conf(它只是在Debian中相同的httpd.conf )。這追加到結束:

WSGIScriptAlias//home/user/Desktop/expofit/expofit_hg/py/server/server/wsgi.py 
WSGIDaemonProcess example.com python-path=/home/user/Desktop/expofit/expofit_hg/py/server:/home/user/Desktop/expofit/expofit_env/lib/python2.7/site-packages 
WSGIProcessGroup example.com 

<Directory /home/user/Desktop/expofit/expofit_hg/py/server/server> 
<Files wsgi.py> 
Order deny,allow 
Allow from all 
</Files> 
</Directory> 

Alias /static/ /home/user/Desktop/expofit/expofit_hg/py/server/server/static 

<Directory /home/user/Desktop/expofit/expofit_hg/py/server/server/static> 
Order deny,allow 
Allow from all 
</Directory> 

然而,這結束與一個錯誤:

[Thu Dec 06 17:08:40 2012] [error] [client 192.168.56.1] ImportError: No module named django.core.wsgi 

看來,標準的Python是可訪問的,因爲

import os 

產生任何錯誤。所以看起來從virtualenv導入的模塊是不可導入的。 教程說:

A further change required to the above configuration if you use daemon mode is that you can't use WSGIPythonPath; instead you should use the python-path option to WSGIDaemonProcess, for example:

WSGIDaemonProcess example.com python-path=/path/to/mysite.com:/path/to/venv/lib/python2.7/site-packages 
WSGIProcessGroup example.com 

我缺少什麼?

回答

2

的問題是在權限中。我沒有檢查用戶是誰,以及開始時的權限,但是當我將權限777更改爲包含Django代碼文件的所有目錄時,它開始工作。

我知道一個人必須儘可能謹慎地使用權限,並且給所有人提供777並不是最好的方式,但應該檢查如何使它在最小權限更改的情況下工作。但它解決了問題中的問題。

1

對於單個應用程序,這是開箱即用的最簡單的方法,請參閱http://code.google.com/p/modwsgi/wiki/VirtualEnvironments#Baseline_Environment既不能使用WSGIPythonPath,也不能只使用WSGIPythonPath,但必須是全局的。

WSGIPythonHome [path to virtualenv folder] 

如果您有多個應用程序 - 使用的sys.path在wsgi.py頂部追加你的virtualenv的site-packages文件夾似乎做,看到http://code.google.com/p/modwsgi/wiki/VirtualEnvironments#Application_Environments最簡單的事情。

+0

做了什麼用途和教程建議。在Apache日誌中結束了:「ImportError:No module named site」。將代碼更改爲之前的版本,但日誌不斷更新,因此wsgi.py中沒有更多的「導入網站」 – TheMeaningfulEngineer

+0

然後,您正在使用針對與虛擬環境不同的Python版本編譯的mod_wsgi,或者你填滿了你設置WSGIPythonHome的東西。因爲如果使用mod_wsgi 3.4而不是WGSIPythonHome,則使用守護進程模式,請使用WSGIDaemonProcess指令的python-home選項。 –

+0

@GrahamDumpleton,但我沒有看到'WSGIDaemonProcess'指令中的'python-home'選項 https://code.google。com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess – eldos

1

pythonpath envinronment不同於我認爲的apache。
安裝Django 「globaly」 用的easy_install或點子

或.virtualenv PYTHONPATH添加到mod_wsgi的配置

WSGIPythonPath目錄|目錄1:目錄2:

MOD_wsgi config

+1

我想在守護進程模式下使用wsgi,並且在Django文檔中指定,在這些情況下,「WSGIPythonPath」不起作用,但必須使用「WSGIDaemonProcess example.com」python-path =/path/to/mysite.com:/path/to/venv/lib/python2.7/site-packages」 – TheMeaningfulEngineer

相關問題