Я пытаюсь подключиться к серверу SQL Server из приложения Django, используя пакет django-pyodbc-azure.Django/Pyodbc/Apache - Ошибка подключения при использовании Apache
Я могу подключать и возвращать данные, используя оболочку Django manage.py (как запросы ORM, так и pyodbc) и сервер разработки (HttpResponse в функции просмотра), но когда я пытаюсь использовать Apache и mod_wsgi, я получаю ошибка:
('08S01', '[08S01] [unixODBC][FreeTDS][SQL Server]Unable to connect: Adaptive Server is unavailable or does not exist (20009) (SQLDriverConnect)')
Я использую Red Hat Enterprise Linux 7, Python 3.3.5, 3.0.7 Pyodbc, Django 1.7, Apache 2.4.6, 4.4.5 mod_wsgi, SQL Server 2014, FreeTDS 0,91 (с помощью DSN-меньше), и Джанго-Pyodbc-Лазурный 1.2.0
Modwsgi.conf:
<VirtualHost *:80>
WSGIDaemonProcess xxx.xxx.xxx.xxx python-path=/path/to/mysite.com:/path/to/virtualenv/lib/python3.3/site-packages processes=2 threads=15
WSGIProcessGroup xxx.xxx.xxx.xxx
WSGIScriptAlias//path/to/mysite.com/mysite/wsgi.py
<Directory /path/to/mysite.com/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
wsgi.py:
"""
WSGI config for mysite project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/
"""
import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
В settings.py:
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'HOST': 'hostname',
'NAME': 'dbname',
'USER': 'dbuser',
'PASSWORD': 'dbpassword',
'PORT': '1433',
'OPTIONS': {
'driver': 'FreeTDS',
'host_is_server': True,
'unicode_results': True,
'extra_params': 'tds_version=7.4'
}
}
}
При использовании manage.py работает erver Я могу просматривать данные в браузере.
От переводчика я могу сделать:
In [1]: import pyodbc
In [2]: conn = pyodbc.connect('DRIVER=FreeTDS;SERVER=servername;PORT=1433;DATABASE=dbname;UID=dbuser;PWD=dbpassword')
In [3]: cursor = conn.cursor()
In [4]: cursor.execute("select top 5 test_names from test_table;").fetchone()
Out[4]: ('John',)
Но по какой-то причине первая попытка подключения к базе данных pyodbc терпит неудачу, когда я пытаюсь использовать Apache.
Любая помощь по этому поводу очень ценится.
Я не уверен, выполнит ли это это (я сомневаюсь), но ваша версия TDS должна быть 7.2, а не 7.4. В то время как 7.4 является последней версией Microsoft Spec, поддержка FreeTDS поддерживается только через 7.2: http://www.freetds.org/userguide/choosingtdsprotocol.htm – FlipperPA
@FlipperPA Первоначально у меня была версия в 7.2, когда я столкнулся с проблемой и изменил ее до 7.4 в надежде, что это может помочь, но спасибо за предложение. – clank
RedHat часто включает SELinux, который применяет ограничения на то, какой код на самом деле работает под Apache. Возможно, вам придется настроить политику SELinux. Попробуйте временно отключить SELinux для подтверждения. –