1

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()

config の読み取り時にエラーが発生せず、また .NET でもエラーが発生しないため、mod_wsgi がconfigデータベース アクセスの詳細を含むファイルを見つけるのに問題はないと思いますfrom app import models

これまでの私の調査では、これは間違ったスコープまたはコンテキストに存在する sql-alchemy db 接続と関係があり、おそらくフラスコの落ち着きのない API マネージャーによって複雑になっていると信じるに至りました。私はそれに頭を包むことができないようです。

4

1 に答える 1

1

Apache/mod_wsgi の下のコードは、特別な Apache ユーザーとして実行されます。そのユーザーは、データベースへの接続に必要な権限を持っていない可能性があります。

'localhost' と表示されていて、通常のソケット接続を暗示していると思われる場合でも、一部のデータベース クライアントは 'localhost' を認識し、代わりにデータベース用の UNIX ソケットを自動的に使用しようとします。その UNIX ソケット接続にアクセスできない可能性があります。

あるいは、UNIX ソケット接続を経由するときに、Apache ユーザーがアクセス権を持っているかどうかを検証しようとしますが、データベースが Apache ユーザー アクセスを許可するように設定されていない場合、失敗する可能性があります。

mod_wsgi のデーモン モードの使用を検討し、デーモン モードを構成して、Apache ユーザーとは別のユーザーとして実行し、データベースにアクセスできることがわかっているユーザーとして実行します。

于 2014-06-04T10:46:21.180 に答える