Pregunta

Estoy intentando ejecutar una aplicación flask-restless en Apache usando mod_wsgi.Esto funciona bien con el servidor de desarrollo.He leído todo lo que puedo encontrar y ninguna de las respuestas que he visto parece funcionar para mí.La aplicación maneja correctamente las solicitudes que no son de bases de datos, pero muestra el siguiente error cuando intento acceder a una URL que requiere acceso a la base de datos:

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

Básicamente, me he reducido al inicio rápido con mi matraz inquieto. config y mis modelos flask-sqlalchemy importados (from flask import models).Aquí está mi código 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()

Supongo que mod_wsgi no tiene problemas para encontrar el config archivo que contiene los detalles de acceso a la base de datos ya que no recibo un error al leer la configuración y tampoco recibo un error al from app import models.

Mi investigación hasta ahora me ha llevado a creer que esto tiene algo que ver con la conexión sql-alchemy db que existe en el ámbito o contexto incorrecto y posiblemente complicada por el administrador de API flask-restless.Parece que no puedo entenderlo.

¿Fue útil?

Solución

Su código en Apache / Mod_wsgi se ejecutará como un usuario especial de Apache.Ese usuario es probable que no tenga los privilegios necesarios para conectarse a la base de datos.

Aunque dice 'localhost' y cree que puede implicar una conexión de socket normal, algunos clientes de la base de datos verán 'localhost' y, en su lugar, intentarán y volverán a usar el zócalo UNIX para la base de datos.Es posible que no tenga acceso a esa conexión de zócalo UNIX.

Alternativamente, al pasar por una conexión de socket Unix, está intentando validar si el usuario de Apache tiene acceso, pero si la base de datos no se ha configurado para permitir el acceso al usuario de Apache, puede fallar.

Considere usar el modo Daemon de MOD_WSGI y configurar el modo Daemon para que se ejecute como un usuario diferente al usuario de Apache y uno que conozca tiene acceso a la base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top