Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python mod#u wsgi can';t连接到MySQL服务器_Python_Apache_Mod Wsgi_Flask Sqlalchemy_Flask Restless - Fatal编程技术网

Python mod#u wsgi can';t连接到MySQL服务器

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模

我正在尝试使用mod_wsgi在apache中运行flask Untivent应用程序。这在开发服务器上运行良好。我已经阅读了我能找到的一切,我所看到的答案似乎都不适合我。该应用程序正确处理非数据库请求,但在我尝试访问需要数据库访问的url时出现以下错误:

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在以下位置的文档中引用: