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

OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on 'localhost' ([Errno 13] Permission denied)") None None

我已经减少到基本上烧瓶-不安的快速启动与我的 config 和我的flask-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连接有关,并且可能被flask-alchemy API管理器复杂化。我似乎无法将我的头包裹在它周围。

有帮助吗?

解决方案

您在Apache/mod_wsgi下的代码将作为特殊的Apache用户运行。该用户可能没有连接到数据库所需的权限。

即使它说'localhost',你认为这可能意味着一个正常的套接字连接,一些数据库客户端会看到'localhost',并会自动尝试使用UNIX套接字作为数据库。它可能无法访问该UNIX套接字连接。

或者,当通过UNIX套接字连接时,它试图验证Apache用户是否具有访问权限,但如果数据库尚未设置为允许Apache用户访问,则可能会失败。

考虑使用mod_wsgi的守护进程模式,并将守护进程模式配置为作为与Apache用户不同的用户运行,并且您知道可以访问数据库。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top