tao*_*oat 16 python apache mod-wsgi centos selinux
我在CentOS 6.5上使用Apache 2.2.15.我正在尝试使用mod_wsgi设置Django应用程序.我正在使用虚拟环境,并且配置了mod_wsgi --with-python=/path/to/virtualenv/bin/python3.4
.
我已将此添加到我的httpd.conf
:
WSGIPythonPath /srv/myproject:/path/to/virtualenv/lib/python3.4/site-packages
WSGIPythonHome /path/to/virtualenv
<VirtualHost *:80>
WSGIScriptAlias / /srv/myproject/myproject/wsgi.py
...
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)
在wsgi.py
,我补充说
sys.path.insert(1, "/path/to/virtualenv/lib/python3.4/site-packages")
Run Code Online (Sandbox Code Playgroud)
问题是,当我尝试在浏览器中打开应用程序时,它会无限期地加载.这是Apache错误日志:
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'
[Mon Jun 30 17:37:28 2014] [notice] child pid 19370 exit signal Aborted (6)
[Mon Jun 30 17:37:28 2014] [notice] child pid 19371 exit signal Aborted (6)
...
[Mon Jun 30 17:37:28 2014] [notice] child pid 19377 exit signal Aborted (6)
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'
Run Code Online (Sandbox Code Playgroud)
有趣的是,在Python(2.6)的系统安装和虚拟环境版本(3.4)中,import encodings
工作正常!我已经尝试使用mod_wsgi CheckingYourInstallation页面中的示例WSGI脚本来确认Apache正在使用哪个版本的Python,但是我得到了相同的ImportError.
有没有人对后续步骤有什么建议?我已经搜过了文档,但我不知道从哪里开始.
所以在我的朋友(IE:SysAdmins)的帮助下,我们昨晚解决了这个问题。我通过示例学习得最好,所以让我们假设您使用 mod_wsgi 作为 Linux 组 apache 使用用户flipperpa 运行 Apache。假设您在 /home/my_project 中托管,而 wsgi.py 在 my_project/wsgi.py 中。
在顶层 (ls -l /):
drwxr-xr-x. 47 root root 4096 Jul 9 09:43 home
Run Code Online (Sandbox Code Playgroud)
在主目录 (ls -l /home) 中:
drwxrwsr-x 7 flipper apache 4096 Jul 29 10:22 my_project
Run Code Online (Sandbox Code Playgroud)
这是关键。小写的“s”表示设置了apache组的setgid位,并且设置了execute位。当然,最后的“x”意味着任何人都可以执行。
在树下检查您的权限;这对我们有用。