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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top