如何在CentOS上通过WSGI运行Django
我尝试了两种方法来配置wsgi,以便在我的网站上使用Django。我的项目根目录在 /var/run/myApp。这是我的 wsgi.py 文件:
import os
os.environ['DJANGO_SETTINGS_MODULE'] = 'myApp.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
1. 我在apache上安装了运行Django所需的一切,并使用centos作为操作系统。我使用这个网站来运行wsgi。我用这个命令来设置我的服务器:
mod_wsgi-express setup-server wsgi.py --port=80 --user test --group test --server-root=/var/run/myApp/mod_wsgi-express-80
之后我运行了这个命令,一切都正常:
/var/run/myApp/mod_wsgi-express-80/apachectl start
但是当我访问我的网站时,出现了错误 500 : Internal Server Error
2. 我还尝试了另一种配置apache配置文件的方法,但在apache的错误日志中出现了这个错误:
" Target WSGI script not found or unable to stat: /run "
这是我在 httpd.conf 中写的内容:
WSGIDaemonProcess mySite user=test group=test
WSGIProcessGroup mySite
<VirtualHost *:80>
WSGIScriptAlias / run/myApp/my_App/wsgi.py
<Directory run/myApp/my_App>
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
问题出在哪里呢?谢谢。
1 个回答
2
如果你在用Django,建议使用mod_wsgi express来集成Django,这样会更好。
首先,在Django的settings.py
文件里,把'mod_wsgi.server'
加到INSTALLED_APPS
里。
接着,使用runmodwsgi
管理命令时,加上--setup-only
这个选项:
python manage.py runmodwsgi --setup-only --port=80 --user test --group test --server-root=/var/run/myApp/mod_wsgi-express-80
这样做是为了替代mod_wsgi-express setup-server
这个命令。
然后你可以使用:
/var/run/myApp/mod_wsgi-express-80/apachectl start
以root身份运行。
通过使用runmodwsgi
这个管理命令,mod_wsgi express会自动考虑Django的静态文件目录,并把它加入到生成的Apache配置里。
在使用静态文件时,记得运行:
python manage.py collectstatic
这样可以把任何静态文件复制到你在Django的settings.py
文件里指定的STATIC_ROOT
目录。
使用管理命令时,mod_wsgi express还会正确设置Django的顶级目录作为应用的主目录,并确保模块搜索路径设置得当,这样你的项目模块才能被找到。