我正在尝试使用mod_wsgi在apache中运行一个无烧瓶应用程序。这适用于开发服务器。我已经阅读了我能找到的所有内容,但我所看到的答案似乎都不适合我。该应用程序正确处理非数据库请求,但在我尝试访问需要数据库访问的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
文件时遇到问题,因为我在阅读配置时没有收到错误,而且我也没有。 t from app import models
上出错。
到目前为止,我的研究使我相信这与存在于错误范围或上下文中的sql-alchemy数据库连接有关,并且可能由于无法使用的API管理器而变得复杂。我似乎无法绕过它。
答案 0 :(得分:1)
Apache / mod_wsgi下的代码将作为特殊的Apache用户运行。该用户可能没有连接数据库所需的权限。
即使它显示'localhost'并且您认为这可能意味着正常的套接字连接,但某些数据库客户端将看到'localhost'并将自动尝试使用UNIX套接字来存储数据库。它可能无法访问该UNIX套接字连接。
或者,当进行UNIX套接字连接时,它会尝试验证Apache用户是否具有访问权限,但如果数据库尚未设置为允许Apache用户访问,则可能会失败。
考虑使用mod_wsgi的守护进程模式并配置守护进程模式以作为Apache用户的不同用户运行,并且您知道可以访问数据库。