【问题标题】:Django app hangs when attempting to connect to database via ApacheDjango 应用程序在尝试通过 Apache 连接到数据库时挂起
【发布时间】:2015-08-05 19:54:10
【问题描述】:

我在解决此问题时遇到了困难。我有一个在 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 的调试在这里也没有什么用处。

【问题讨论】:

  • 应用程序对数据库的访问通常是通过另一个端口,而不是通过Apache。生产环境中SQL Server地址是否配置正确?
  • 感谢您的回复,aldux。我正在使用 freetds 通过端口 1433 访问 SQL Server。此设置对于我的开发和生产环境是相同的,但我会尽快在这里再次检查。

标签: python sql-server django apache pymssql


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

见:

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

【讨论】:

  • 太棒了!谢谢你,格雷厄姆!那解决了它。这些链接也很有帮助。
猜你喜欢
  • 1970-01-01
  • 2021-05-14
  • 2021-08-10
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 2012-01-19
  • 2017-12-23
  • 1970-01-01
相关资源
最近更新 更多