尝试通过Apache连接到数据库时,Django应用程序挂起

时间:2015-08-05 19:54:10

标签: python sql-server django apache pymssql

我无法解决此问题。我有一个在Ubuntu 14.04服务器上运行的Django应用程序(Apache 2.4和用于Python 3.4的mod_wsgi)。它通过pymssql连接到SQL Server。

在开发中,该应用程序运行正常。我查询数据库,数据库返回预期的结果。

然而,在生产中(在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调试在这里也没用。

1 个答案:

答案 0 :(得分:4)

而不是:

# 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中错误的第三方扩展模块,这些模块在子解释器中不起作用,并且可能因死锁或崩溃而失败。

请参阅:

还建议您返回使用守护程序模式。使用嵌入模式通常不是一个好主意。