2011-12-02 123 views
1

我正在嘗試使用wsgi部署django。但它不工作。你能幫我嗎?謝謝使用apache部署django,mod-wsgi

django.wsgi.py

#!/usr/bin/python 
import os, sys 
sys.path.append('/home/me/project') 
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings' 
import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

/etc/apache2/sites-available/default

<VirtualHost *:80> 

    ServerName www.me.org 
    ServerAlias *me.org 

    Alias /admin_media /usr/lib/python2.4/site-packages/django/contrib/admin/media 

    <Location /admin_media> 
    Order allow,deny 
    Allow from all 
    </Location> 

    Alias /media /var/www/media/ 

    <Location /media> 
    Order allow,deny 
    Allow from all 
    </Location> 

    WSGIScriptAlias//home/me/project/apache/django.wsgi 

    WSGIDaemonProcess me processes=2 maximum-requests=500 threads=1 
    WSGIProcessGroup me 

</VirtualHost> 

Error Message

/etc/init.d/apache2 restart 
Syntax error on line 3 of /etc/apache2/sites-enabled/me: 
Invalid command 'PythonHandler', perhaps misspelled or defined by a module not included in the server configuration 
Action 'configtest' failed. 
The Apache error log may have more information. 
    ...fail! 

UPDATE:奇怪/etc/apache2/sites-enable/me

<Location "/"> 
SetHandler python-program 
PythonHandler django.core.handlers.modpython 
PythonDebug On 
PythonPath "['/home/me2'] + sys.path" 
SetEnv DJANGO_SETTINGS_MODULE me.settings 

我可以禁用mod-python嗎?

+0

提供我們缺少的文件/ etc /啓用網站/我的Apache2 /文檔。或者這是/ etc/apache2/sites-available/default的符號鏈接? –

+0

@密度21.5對不起 – Kulbir

+0

@密度21.5查看更新 – Kulbir

回答

1

/etc/apache2/sites-enable/me文件是modpython。

您正在使用mod_wsgi。

因此。取出/etc/apache2/sites-enable/me並按照這裏

https://docs.djangoproject.com/en/dev/howto/deployment/wsgi/modwsgi/

+0

我已經刪除了'/ etc/apache2/sites-enable/me'。現在我越來越了。'請求的URL /在此服務器上找不到.' – Kulbir

+0

@no_access:這是一個單獨的問題。請打開一個**新問題,提供有關您的新問題的**相關詳細信息。您可能需要創建一個將請求引導到您的Django實例的Apache「位置」。請接受這個問題的答案,並開始一個新的問題,涵蓋你的新情況。 –

3

顯而易見,您的錯誤消息來自與此處顯示的文件不同的文件 - me而不是default。該文件顯然有一個PythonHandler,這是一個指令,屬於mod_python,你似乎沒有安裝(不應該,因爲它已被棄用)的參考。

如果修復了該錯誤(很可能是通過完全刪除該文件),則會在wsgi文件中修復另一個文件 - 您已將project路徑添加到pythonpath,但隨後將您的設置作爲參考引用project.settings,所以不會被發現。請改爲添加父路徑,或者參考設置,僅爲settings

+0

感謝:-)回覆 – Kulbir

1

我不是這方面的專家,但是這裏是比較我的工作。我使用的是mod_wsgi而不是mod_python。 「/ etc/apache2/sites-enabled/me」中有什麼我似乎已在我的「django.wsgi.py」文件中指定,並且在啓用了站點的情況下我沒有這樣的文件。

對於您的django.wsgi.py,您可能需要將路徑添加到外部庫中,並且當爲我的項目設置路徑時,我的設置文件是/var/myproject/src/myapp/settings.py,並將路徑設置爲'/ var/myproject/src',將django_settings_module設置爲myapp.settings。下面是我的myproject.wsgi文件看起來像:

#!/usr/bin/python 
import os 
import sys 
sys.path.append('') 
sys.path.append('/usr/local/lib/python2.7/site-packages') 
sys.path.append('/usr/local/lib/python2.7/site-packages/Django-1.3-py2.7.egg') 
... other external libs .. 
sys.path.append('/var/myproject/myapp/src') 
os.environ['DJANGO_SETTINGS_MODULE'] = 'myapp.settings' 
os.environ['PYTHON_EGG_CACHE'] = '/tmp' 
import django.core.handlers.wsgi 
application = django.core.handlers.wsgi.WSGIHandler() 

以下是我已經得到了我的wsgi.conf:

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    DocumentRoot "/var/myproject/" 
    ServerName localhost 
    ErrorLog "/var/myproject/logs/apache-error.log" 
    CustomLog "/var/myproject/logs/apache-access.log" common 

    Options ExecCGI FollowSymLinks MultiViews 

    AddHandler wsgi-script .wsgi 
    WSGIDaemonProcess asgportal 
    WSGIProcessGroup asgportal 

    Alias /static /var/myproject/media/static 
    WSGIScriptAlias//var/myproject/myproject.wsgi # my django.wsgi.py file 

    DirectoryIndex index.html index.cgi 

    AddHandler cgi-script .cgi .pl 
</VirtualHost>