2010-02-17 196 views
0

我是小白,但我做了我的申請工作中使用python manage.py runserver漂亮,但是當我把它到Apache + mod_wsgi的,我不斷收到此錯誤。調試消息沒有多大幫助。這裏是整個調試圖像的截圖:http://img694.imageshack.us/img694/6723/screenshotfb.pngPinax(13「權限被拒絕」)

這裏是我的http.conf文件的轉儲。

WWSGIDaemonProcess cloud-tester python-path=/home/ubuntu/.virtualenvs/pinax-env/lib/python2.6/site-packages 
WSGIProcessGroup cloud-tester 

WSGIScriptAlias /cloudrunner /home/ubuntu/projects/cloudfly/deploy/pinax.wsgi 
<Directory /home/ubuntu/projects/cloudfly/deploy> 
    Order deny,allow 
    Allow from all 
</Directory> 

pinax.wsgi的內容是Pinax的內容。我沒有改變任何東西。

我創建了一個樣本「basic_project」,並且工作正常。這不是。

在此先感謝!有關我應該做什麼的建議?

回答

4

下的Apache/mod_wsgi的代碼將運行Apache的用戶通常不會有訪問權限寫信給你作爲一個用戶目錄。閱讀:

http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Access_Rights_Of_Apache_User

各地的最簡單的方法是運行make運行爲相同的用戶手動運行該代碼的守護進程。爲此,使用WSGIDaemonProcess的'user/group'選項。閱讀:

http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess

的另一個問題可能是你已經在你的代碼中使用相對路徑。這在Apache下不起作用,因爲當前的工作目錄可能是任何東西。你應該總是使用絕對路徑名,或者至少計算它們相對於__file__的os.path.dirname()來計算它正在執行的代碼文件。

如果你真的不想要要處理它,就是使用WSGIDaemonProcess的'home'選項將守護進程的當前工作目錄設置爲手動運行服務器的同一目錄。請參閱上面引用的WSGIDaemonProcess的相同文檔。

+0

我嘗試了你說的兩條建議。沒有運氣。 這裏是我的pinax.wsgi文件:http://www.copypastecode.com/22518/ 這裏是我的httpd.conf:http://www.copypastecode.com/22522/ 我的項目位於/家用/ Ubuntu的/項目/ cloudfly。 感謝您的幫助! –

+0

試試'home =/home/ubuntu/projects/cloudfly'。這是運行服務器用作當前工作目錄的目錄,而不是您的部署子目錄。 –

0

當您使用'python manage.py runserver'時,您正在以root身份登錄,這就是爲什麼允許寫入該導向器的原因,但是當Apache啓動您的wsgi腳本時,它將在其不允許寫入的用戶名下在目錄中你有你的Python腳本中。

假設你正在使用Ubuntu的服務器,我有同樣的問題。我固定它使用

CHOWN WWW的數據:WWW的數據-R媒體

我一直在/ var/pyproj /我所有的PY腳本。媒體文件夾將位於/ var/pyproj // pysrc(我的pinax安裝目錄)/ site_media/

我將我的wsgi腳本,nginx conf和vhost.conf保存在/ var/pyproj //服務器中。

祝您好運同胞的Django的用戶。我希望這有幫助。