mysql pmod项目_apache mod_wsgi 部署django项目后连接不上mysql

问题描述

做好的django项目,使用python manage.py runserver 可以正常work. 然而当将项目使用mod_wsgi部署到apache上之后却不能连接mysql.一直报错:“Internal Server Error”,查看日志信息,除了“Can't connect mysql”还是连不上mysql.

追踪问题

django测试

分别在debug模式以及debug off模式下运行项目,无任何异常,足以证明项目自身配置没任何错误。

Python代码测试

运行python manage.py shell,导入MySQLdb,使用驱动代码测试也无异常。说明驱动的版本什么的没有错误。

查看源码

在django/admin/db/backend/mysql/base.py中直接修改连接数据库的参数信息,并在MySQLdb中的_init.py中打印传进来的参数信息。

python manage.py runserver debug模式开与关打印出来的信息一致。

开启apache 访问主页打印出来的信息与上述信息无差异。

这么以来就可以得出结论:项目组件以及配置没什么错误。

寻找答案

经过问题的一系列追踪,查询网络无果。想起mod_wsgi这货,再根据这个去搜得出结论apache在安装的时候所配置的系统用户apache/apache没有权限访问默认的mysql.sock配置文件所在路径。让修改这个权限,可是真不会修改。于是开始下面的尝试:

直接修改apache配置文件中的user和group为root,比较系统中root的权限最高,没有他访问不了的东西。结果在重启apache的时候报错,不允许使用root用户。

又将其修改为mysql/mysql,因mysql/mysql是我们在安装mysql时所使用的系统用户。重启却无任何影响,依然是Can't connect mysql

再想想,一般项目生产环境也不会把web跟db配置在一台Server上倒不如换个其他机器上的mysql配置。果然如此可以正常访问了。

因SELinux阻止apache访问,另一个问题就是需要为apache授权:

setsebool -P httpd_can_network_connect 1

setsebool -P httpd_can_network_connect_db 1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值