flask-使用mod_wsgi无法连接MySQL服务器
-
21-12-2019 - |
题
我正在尝试使用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用户不同的用户运行,并且您知道可以访问数据库。