Приложение Django зависает при попытке подключения к базе данных через Apache

У меня возникли трудности с устранением этой проблемы. У меня есть приложение Django, работающее на сервере Ubuntu 14.04 (с Apache 2.4 и mod_wsgi для Python 3.4). Он подключается к SQL Server через pymssql.

В разработке приложение работает нормально. Я запрашиваю базу данных, и база данных возвращает ожидаемые результаты.

Однако в рабочей среде (под пользователем Apache) сценарий зависает именно в тот момент, когда выполняется запрос к базе данных. Мой браузер (Chrome или Firefox) показывает вращающееся колесо, которое продолжает вращаться, пока окно браузера открыто.

В моем файле apache2.conf есть следующее:

ServerName localhost
# WSGIDaemonProcess application
WSGIPythonPath /home/production_code/python3env/lib/python3.4/site-packages:/home/production_code/school
# WSGIProcessGroup application
WSGIScriptAlias / /home/production_code/school/school/wsgi.py
# Python virtualenv home
WSGIPythonHome /home/production_code/python3env
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf

И следующее в моем файле sites-enabled/000-default.conf:

<VirtualHost *:80>    
        ServerAdmin *****@school.edu
        ServerName  localhost
        DocumentRoot /var/www/html

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        Alias /static/ /home/production_code/school/static/

        <Directory /home/production_code/school/>
            Require all granted
        </Directory>
        <Directory /home/production_code/school/>
            <Files wsgi.py>
                Require all granted
            </Files>
        </Directory>
        <Directory /home/production_code/school/static>
            Require all granted
        </Directory>
</VirtualHost>

Кто-нибудь знает, что может быть причиной этого или как я могу устранить эту проблему? Журналы ошибок Apache и журналы доступа в этой ситуации не особенно полезны, поскольку ответ на запрос никогда не отображается. Точно так же отладка Django здесь также бесполезна.


person user3079064    schedule 05.08.2015    source источник
comment
Доступ приложения к базе данных обычно осуществляется через другой порт, а не через Apache. Правильно ли настроен адрес SQL Server в производственной среде?   -  person aldux    schedule 05.08.2015
comment
Спасибо за ответ, aldux. Я использую freetds для доступа к SQL Server через порт 1433. Этот параметр одинаков для моей среды разработки и рабочей среды, но я еще раз проверю, как только у меня будет возможность.   -  person user3079064    schedule 05.08.2015


Ответы (1)


Вместо:

# WSGIDaemonProcess application
WSGIPythonPath /home/production_code/python3env/lib/python3.4/site-packages:/home/production_code/school
# WSGIProcessGroup application

использовать:

WSGIDaemonProcess application python-path=/home/production_code/python3env/lib/python3.4/site-packages:/home/production_code/school
WSGIProcessGroup application
WSGIApplicationGroup %{GLOBAL}

Ключевой частью этого является директива WSGIApplicationGroup, для которой установлено значение %{GLOBAL}.

Это делается для того, чтобы обойти неисправные сторонние модули расширения для Python, которые не работают в суб-интерпретаторах и могут дать сбой из-за блокировки или сбоя.

Видеть:

Также рекомендуется вернуться к использованию режима демона. Обычно не рекомендуется использовать встроенный режим.

person Graham Dumpleton    schedule 06.08.2015
comment
Великолепно! Спасибо, Грэм! Это решило это. И эти ссылки тоже очень полезны. - person user3079064; 06.08.2015