在Amazon Linux部署Django应用失败,遭遇Python初始化编码错误
解决Django部署时的Py_Initialize locale编码错误
兄弟,你这个问题我之前在Amazon Linux部署Django的时候也碰到过!核心问题出在你的WSGI配置里的python-home路径设置错了,先给你说最直接的解决方案:
1. 修正WSGI的python-home参数
看你当前的配置:
WSGIDaemonProcess cryptoapp python-home=/var/www/djangoenv/lib/python3.5/site-packages python-path=/var/www/cryptoapp
这里的python-home不应该指向site-packages目录,而是要直接指向你的virtualenv根目录!改成这样:
WSGIDaemonProcess cryptoapp python-home=/var/www/djangoenv python-path=/var/www/cryptoapp
原因很简单:python-home是告诉mod_wsgi用哪个虚拟环境的Python解释器,你指向site-packages的话,mod_wsgi找不到完整的Python核心环境,自然会报找不到encoding模块的初始化错误。
2. 补充系统locale环境变量(如果第一步没解决)
如果改完路径还是报错,大概率是系统locale没设置对,Python初始化时拿不到正确的编码信息。你可以给WSGI进程指定环境变量:
WSGIDaemonProcess cryptoapp python-home=/var/www/djangoenv python-path=/var/www/cryptoapp environment="LC_ALL=en_US.UTF-8,LANG=en_US.UTF-8"
然后重启Apache生效:
sudo systemctl restart httpd
(如果你的系统用的是旧版服务管理,也可以用sudo service httpd restart)
3. 确认权限问题(防坑)
别忘了给Apache用户权限访问你的虚拟环境和项目目录,不然也可能出各种奇怪的错误:
sudo chown -R apache:apache /var/www/djangoenv /var/www/cryptoapp sudo chmod -R 755 /var/www/djangoenv /var/www/cryptoapp
你本地virtualenv能正常跑,说明项目代码和依赖都没问题,主要就是mod_wsgi没正确关联到你的虚拟环境,先改python-home路径应该就能搞定了!
内容的提问来源于stack exchange,提问作者Sahadev
相关产品推荐
相关产品推荐

