Il pallone-irrequieto con mod_wsgi non può connettersi a MySQL Server
-
21-12-2019 - |
Domanda
Sto cercando di eseguire un'app Flak-Inspatless in Apache usando Mod_SGI. Questo funziona bene con il server di sviluppo. Ho letto tutto ciò che riesco a trovare e nessuna delle risposte che ho visto sembra funzionare per me. L'app gestisce le richieste di non-database correttamente ma fornisce il seguente errore quando provo ad accedere a un URL che richiede un accesso al database:
OperationalError: (OperationalError) (2003, "Can't connect to MySQL server on 'localhost' ([Errno 13] Permission denied)") None None
Ho lavorato fino a fondamentalmente il fiaschetta-inizio rapido senza irrequieto con il mio config
e i miei modelli di flacone-sqlalchemy importati (from flask import models
). Ecco il mio codice 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()
.
Suppongo che MOD_WSGI non stia avendo un problema a trovare il file config
che contiene i dettagli di accesso del database poiché non ricevo un errore durante la lettura della configurazione e anche io non ricevo un errore su from app import models
. La mia ricerca finora mi ha portato a credere che questo abbia qualcosa a che fare con la connessione DB SQL-Alchemy DB esistente nella portata sbagliata o nel contesto sbagliato e possibilmente complicato dal gestore API di Flask-Restless. Non riesco a avvolgermi la testa.
Soluzione
Il tuo codice in Apache / Mod_WSGI verrà eseguito come speciale utente Apache.Quell'utente probabile non ha i privilegi necessari per connettersi al database.
Anche se dice "localhost" e pensi che possa implicare una normale connessione socket, alcuni client di database vedranno 'localhost' e verrà automaticamente tentato di utilizzare la presa UNIX per il database.Potrebbe non essere accessibile a quella connessione socket UNIX.
In alternativa, quando si passa attraverso una connessione Socket Unix, sta tentando di convalidare se l'utente Apache che ha accesso, ma se il database non è stato impostato per consentire l'accesso dell'utente Apache, potrebbe quindi fallire.
Considerare l'utilizzo della modalità DAEMON di Mod_SGI e configurare la modalità Daemon per eseguire come utente diverso per l'utente Apache e uno conosci ha accesso al database.