我在 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>
在wsgi.py
中,我添加了
sys.path.insert(1, "/path/to/virtualenv/lib/python3.4/site-packages")
问题是,当我尝试在浏览器中打开该应用程序时,它会无限期地加载。这是 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'
有意思的是,无论是系统安装的Python(2.6)还是虚拟环境版本(3.4),import encodings
都可以正常使用!我尝试使用来自 the mod_wsgi CheckingYourInstallation page 的示例 WSGI 脚本确认 Apache 使用的是哪个版本的 Python,但我得到了相同的 ImportError。
有人对下一步有什么建议吗?我已经搜索了文档,但我不知道从这里去哪里。
最佳答案
因此,在我 friend (即:系统管理员)的帮助下,我们昨晚解决了这个问题。我通过示例学习得最好,所以假设您正在运行带有 mod_wsgi 的 Apache 作为 Linux 组 apache 和用户 flipperpa。假设您在/home/my_project 中托管,wsgi.py 在 my_project/wsgi.py 中。
在顶层(ls -l/):
drwxr-xr-x. 47 root root 4096 Jul 9 09:43 home
在主目录中 (ls -l/home):
drwxrwsr-x 7 flipper apache 4096 Jul 29 10:22 my_project
这是关键。小写的“s”表示设置了 apache 组的 setgid 位,并且设置了执行位。当然,最后的“x”表示任何人都可以执行。
检查树下的权限;这对我们有用。
关于python - mod_wsgi : ImportError: No module named 'encodings' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24495348/