Я пытаюсь подключиться к серверной части SQL Server из приложения Django с помощью пакета django-pyodbc-azure.
Я могу подключаться и возвращать данные с помощью оболочки 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, Pyodbc 3.0.7, Django 1.7, Apache 2.4.6, Mod_WSGI 4.4.5, SQL Server 2014, FreeTDS 0.91 (с использованием dsn-less) и Django-Pyodbc -Azure 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'
}
}
}
При использовании runserver manage.py я могу просматривать данные в браузере.
С помощью переводчика я также могу:
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.
Любая помощь по этому поводу очень ценится.
SELINUX=passive
в / etc / selinux / config, но в / var / log / messages нет записей, поэтому я не совсем уверен, что было заблокировано. Знаете ли вы, как я могу это выяснить, не оставляя SELinux полностью отключенным? Спасибо за помощь. - person clank   schedule 19.03.2015