带有mod_wsgi的flask-restless无法连接到MySQL服务器
Posted
技术标签:
【中文标题】带有mod_wsgi的flask-restless无法连接到MySQL服务器【英文标题】:flask-restless with mod_wsgi can't connect to MySQL server 【发布时间】:2014-07-24 17:41:21 【问题描述】:我正在尝试使用 mod_wsgi 在 apache 中运行烧瓶不安分的应用程序。这适用于开发服务器。我已经阅读了我能找到的所有内容,但我所看到的答案似乎都不适合我。该应用程序可以正确处理非数据库请求,但当我尝试访问需要数据库访问权限的 url 时出现以下错误:
OperationalError: (OperationalError) (2003, "Can't connect to mysql server on 'localhost' ([Errno 13] Permission denied)") None None
我已经通过我的config
和我的烧瓶-sqlalchemy 模型导入 (from flask import models
) 基本上简化了烧瓶不安定的快速入门。这是我的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()
我假设 mod_wsgi 在查找包含数据库访问详细信息的 config
文件时没有问题,因为我在读取配置时没有收到错误,我在 from app import models
上也没有收到错误消息.
到目前为止,我的研究使我相信这与存在于错误范围或上下文中的 sql-alchemy db 连接有关,并且可能因烧瓶不安的 API 管理器而变得复杂。我似乎无法理解它。
【问题讨论】:
【参考方案1】:您在 Apache/mod_wsgi 下的代码将以特殊的 Apache 用户身份运行。该用户可能没有连接到数据库所需的权限。
即使它显示“localhost”并且您认为这可能意味着正常的套接字连接,但某些数据库客户端会看到“localhost”并且会自动尝试使用 UNIX 套接字来连接数据库。它可能无法访问该 UNIX 套接字连接。
或者,当通过 UNIX 套接字连接时,它会尝试验证 Apache 用户是否具有访问权限,但如果数据库尚未设置为允许 Apache 用户访问,则可能会失败。
考虑使用 mod_wsgi 的守护程序模式并将守护程序模式配置为以与 Apache 用户不同的用户身份运行,并且您知道该用户可以访问数据库。
【讨论】:
我一开始以为是数据库访问权限问题,但是因为我经常在同一台机器上用php访问mysql,所以拒绝了。你的解释让我重新审视。更改 mod_wsgi 守护程序模式的用户并没有什么不同。事实证明 selinux 阻止了连接。解决方案是setsebool httpd_can_network_connect_db 1
。非常感谢您的帮助。
我也打算这样做,但我想我会先尝试最简单的解释。 SELinux 会抛出各种奇怪的问题。 SELinux 在 code.google.com/p/modwsgi/wiki/… 的文档中被引用以上是关于带有mod_wsgi的flask-restless无法连接到MySQL服务器的主要内容,如果未能解决你的问题,请参考以下文章
flask-restless 限制 RESTful api 访问
使用 Flask-Restless 进行 GAE app.yaml 路由
当我触摸 wsgi 脚本时,带有 mod_wsgi 的烧瓶应用程序不会重新加载