flask-restless with mod_wsgi can't connect to MySQL server
Question: I am trying to run a flask-restless app in apache using mod_wsgi. This works
fine with the development server. I have read everything I can find and none
of the answers I have seen seem to work for me. The app handles non-database
requests properly but gives the following error when I try to access a url
that requires a database access:

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

I have whittled down to basically the flask-restless quick-start with my
`config` and my flask-sqlalchemy models imported (`from flask import models`).
Here is my 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()
    

I assume that mod_wsgi isn't having a problem finding the `config` file which
contains the database access details since I don't get an error when reading
the config and I also don't get an error on `from app import models`.

My research so far has led me to believe that this has something to do with
the sql-alchemy db connection existing in the wrong scope or context and
possibly complicated by the flask-restless API manager. I can't seem to wrap
my head around it.


Answer: Your code under Apache/mod_wsgi will run as a special Apache user. That user
likely doesn't have the privileges required to connect to the database.

Even though it says 'localhost' and you think that may imply a normal socket
connection, some database clients will see 'localhost' and will automatically
instead try and use the UNIX socket for the database. It may not have access
to that UNIX socket connection.

Alternatively, when going through a UNIX socket connection it is trying to
validate whether the Apache user than has access, but if the database hasn't
been setup to allow the Apache user access, it may then fail.

Consider using daemon mode of mod_wsgi and configure daemon mode to run as a
different user to the Apache user and one you know has access to the database.

