Вопрос

Я пытаюсь запустить приложение, требующее беспокойства, в Apache, используя mod_wsgi.Это отлично работает с сервером разработки.Я прочитал все, что смог найти, и ни один из ответов, которые я видел, похоже, мне не помог.Приложение правильно обрабатывает запросы, не относящиеся к базе данных, но выдает следующую ошибку, когда я пытаюсь получить доступ к URL-адресу, требующему доступа к базе данных:

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

Я свелся к быстрому старту с моим беспокойным фляжком. config и мои импортированные модели flask-sqlalchemy (from flask import models).Вот мой код 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()

Я предполагаю, что у mod_wsgi нет проблем с поиском config файл, который содержит сведения о доступе к базе данных, поскольку я не получаю ошибки при чтении конфигурации, а также не получаю ошибку при from app import models.

Мои исследования на данный момент привели меня к мысли, что это как-то связано с соединением с базой данных sql-alchemy, существующим в неправильной области или контексте и, возможно, осложненным нестабильным менеджером API.Кажется, я не могу уложить в этом голову.

Это было полезно?

Решение

Ваш код под Apache/mod_wsgi будет выполняться от имени специального пользователя Apache.Скорее всего, у этого пользователя нет прав, необходимых для подключения к базе данных.

Несмотря на то, что там написано «localhost», и вы думаете, что это может означать обычное соединение через сокет, некоторые клиенты базы данных увидят «localhost» и вместо этого автоматически попытаются использовать сокет UNIX для базы данных.У него может не быть доступа к этому сокету UNIX.

В качестве альтернативы, при прохождении соединения через сокет UNIX он пытается проверить, имеет ли пользователь Apache доступ, но если база данных не настроена для разрешения доступа пользователя Apache, это может привести к сбою.

Рассмотрите возможность использования режима демона mod_wsgi и настройте режим демона для запуска от имени пользователя, отличного от пользователя Apache, и того, кто, как вы знаете, имеет доступ к базе данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top