Frage

Ich versuche, eine Flask-Restless-App in Apache mit mod_wsgi auszuführen.Dies funktioniert gut mit dem Entwicklungsserver.Ich habe alles gelesen, was ich finden kann, und keine der Antworten, die ich gesehen habe, scheint für mich zu funktionieren.Die App verarbeitet Nicht-Datenbankanforderungen ordnungsgemäß, gibt jedoch den folgenden Fehler aus, wenn ich versuche, auf eine URL zuzugreifen, für die ein Datenbankzugriff erforderlich ist:

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

Ich habe mich im Grunde genommen auf den Kolben reduziert -unruhiger Schnellstart mit meinem config und meine importierten flask-sqlalchemy-Modelle (from flask import models).Hier ist mein Python-Code:

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

Ich gehe davon aus, dass mod_wsgi kein Problem damit hat, das zu finden config datei, die die Datenbankzugriffsdetails enthält, da beim Lesen der Konfiguration keine Fehlermeldung angezeigt wird und auch keine Fehlermeldung angezeigt wird from app import models.

Meine bisherigen Recherchen haben mich zu der Annahme veranlasst, dass dies etwas mit der SQL-Alchemy-DB-Verbindung zu tun hat, die im falschen Bereich oder Kontext vorhanden ist und möglicherweise durch den Flask-Restless-API-Manager kompliziert wird.Ich kann meinen Kopf nicht darum wickeln.

War es hilfreich?

Lösung

Ihr Code unter Apache / mod_wsgi wird als spezieller Apache-Benutzer ausgeführt.Dieser Benutzer verfügt wahrscheinlich nicht über die erforderlichen Berechtigungen, um eine Verbindung zur Datenbank herzustellen.

Obwohl 'localhost' steht und Sie denken, dass dies eine normale Socket-Verbindung implizieren könnte, sehen einige Datenbankclients 'localhost' und versuchen stattdessen automatisch, den UNIX-Socket für die Datenbank zu verwenden.Es hat möglicherweise keinen Zugriff auf diese UNIX-Socket-Verbindung.

Alternativ wird beim Durchlaufen einer UNIX-Socket-Verbindung versucht zu überprüfen, ob der Apache-Benutzer Zugriff hat, aber wenn die Datenbank nicht so eingerichtet wurde, dass der Apache-Benutzer Zugriff hat, schlägt sie möglicherweise fehl.

Erwägen Sie die Verwendung des Daemon-Modus von mod_wsgi und konfigurieren Sie den Daemon-Modus so, dass er als anderer Benutzer als der Apache-Benutzer ausgeführt wird und einer, von dem Sie wissen, dass er Zugriff auf die Datenbank hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top