2015-03-18 3 views
3

Я пытаюсь подключиться к серверу 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.
Любая помощь по этому поводу очень ценится.

+0

Я не уверен, выполнит ли это это (я сомневаюсь), но ваша версия TDS должна быть 7.2, а не 7.4. В то время как 7.4 является последней версией Microsoft Spec, поддержка FreeTDS поддерживается только через 7.2: http://www.freetds.org/userguide/choosingtdsprotocol.htm – FlipperPA

+0

@FlipperPA Первоначально у меня была версия в 7.2, когда я столкнулся с проблемой и изменил ее до 7.4 в надежде, что это может помочь, но спасибо за предложение. – clank

+0

RedHat часто включает SELinux, который применяет ограничения на то, какой код на самом деле работает под Apache. Возможно, вам придется настроить политику SELinux. Попробуйте временно отключить SELinux для подтверждения. –

ответ

1

Вы пробовали работает

sudo setsebool -P httpd_can_network_connect=1 

на машине?

+0

В итоге я просто отключил SELinux и оставил его на этом. Но спасибо за ваше предложение, кажется, гораздо безопаснее. – clank

Смежные вопросы