我试图使用mod_wsgi在apache中运行一个flask-restless应用程序。这在开发服务器上运行良好。我读了我能找到的所有答案,但我所看到的答案似乎都不适合我。应用程序正确处理非数据库请求,但当我尝试访问需要数据库访问的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数据库连接存在于错误的范围或上下文有关,并且可能由于flask-restless API管理器而变得复杂。
您在Apache/mod_wsgi下的代码将作为一个特殊的Apache用户运行。该用户可能没有连接数据库所需的权限。
即使它说'localhost',你认为这可能意味着一个正常的套接字连接,一些数据库客户端将看到'localhost',并将自动尝试使用UNIX套接字作为数据库。它可能无法访问该UNIX套接字连接。
或者,当通过UNIX套接字连接时,它试图验证Apache用户是否有访问权限,但是如果数据库没有设置为允许Apache用户访问,那么它可能会失败。
考虑使用mod_wsgi的守护进程模式,并将守护进程模式配置为作为与Apache用户不同的用户运行,并且您知道该用户可以访问数据库。