Python mod#u wsgi can';t连接到MySQL服务器
我正在尝试使用mod_wsgi在apache中运行flask Untivent应用程序。这在开发服务器上运行良好。我已经阅读了我能找到的一切,我所看到的答案似乎都不适合我。该应用程序正确处理非数据库请求,但在我尝试访问需要数据库访问的url时出现以下错误:Python mod#u wsgi can';t连接到MySQL服务器,python,apache,mod-wsgi,flask-sqlalchemy,flask-restless,Python,Apache,Mod Wsgi,Flask Sqlalchemy,Flask Restless,我正在尝试使用mod_wsgi在apache中运行flask Untivent应用程序。这在开发服务器上运行良好。我已经阅读了我能找到的一切,我所看到的答案似乎都不适合我。该应用程序正确处理非数据库请求,但在我尝试访问需要数据库访问的url时出现以下错误: OperationalError:(OperationalError)(2003,“无法连接到'localhost'上的MySQL服务器([Errno 13]权限被拒绝)”)无 通过导入我的config和我的flask-sqlalchemy模
OperationalError:(OperationalError)(2003,“无法连接到'localhost'上的MySQL服务器([Errno 13]权限被拒绝)”)无
通过导入我的config
和我的flask-sqlalchemy模型(来自flask-import-models
),我已经缩减到基本的flask-untivent快速启动。以下是我的python代码:
import flask
import flask.ext.sqlalchemy
import flask.ext.restless
import sys
sys.path.insert(0, '/proper/path/to/application')
application = flask.Flask(__name__, static_url_path = "")
application.debug=True
application.config.from_object('config')
db = flask.ext.sqlalchemy.SQLAlchemy(application)
from app import models
# Create the Flask-Restless API manager.
manager = flask.ext.restless.APIManager(application, flask_sqlalchemy_db=db)
# Create API endpoints, which will be available at /api/<tablename> by
# default. Allowed HTTP methods can be specified as well.
manager.create_api(models.Asset, methods=['GET'])
# start the flask loop
if __name__ == '__main__':
application.run()
导入烧瓶
导入flask.ext.sqlalchemy
import flask.ext.untivent
导入系统
sys.path.insert(0,“/property/path/to/application”)
application=flask.flask(\uuuuu name\uuuuuu,static\u url\u path=”“)
application.debug=True
application.config.from_对象('config'))
db=flask.ext.sqlalchemy.sqlalchemy(应用程序)
从应用程序导入模型
#创建Flask Antientive API管理器。
manager=flask.ext.untivent.apimager(应用程序,flask\u sqlalchemy\u db=db)
#创建API端点,该端点将在/API/by上提供
#默认。还可以指定允许的HTTP方法。
创建_api(models.Asset,methods=['GET'])
#启动烧瓶循环
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
application.run()
我假设mod_wsgi在查找包含数据库访问详细信息的config
文件时没有问题,因为我在读取配置时没有收到错误,而且在app import models的上也没有收到错误
到目前为止,我的研究已经使我相信这与存在于错误范围或上下文中的sql alchemy db连接有关,并且可能由于flask不安API管理器而变得复杂。我似乎无法理解这一点。您在Apache/mod_wsgi下的代码将作为特殊的Apache用户运行。该用户可能没有连接到数据库所需的权限
尽管它说的是“localhost”,您认为这可能意味着正常的套接字连接,但一些数据库客户机将看到“localhost”,并将自动尝试为数据库使用UNIX套接字。它可能无法访问该UNIX套接字连接
或者,当通过UNIX套接字连接时,它尝试验证Apache用户是否具有访问权限,但是如果数据库没有设置为允许Apache用户访问,则可能会失败
考虑使用mod_wsgi的守护程序模式,并将守护程序模式配置为作为Apache用户的不同用户运行,您知道的用户可以访问数据库。我最初认为这是数据库访问权限问题,但拒绝了它,因为我经常在同一台机器上使用PHP访问mysql。你的解释使我重新考虑。将用户更改为mod_wsgi deamon模式没有任何区别。结果是selinux阻塞了连接。解决方案是setsebool httpd\u can\u network\u connect\u db 1
。非常感谢你的帮助。我也打算提出这个建议,但我想先试试最简单的解释。SELinux可以抛出各种奇怪的问题。SELinux在以下位置的文档中引用: