脚本在返回标题之前超时:弹性beanstalk上的wsgi.py

Mei*_*tro 18 apache django mod-wsgi wsgi amazon-elastic-beanstalk

我正在尝试将Django应用程序部署到Elastic Beanstalk.当我访问页面时,它永远不会加载.日志说:

Script timed out before returning headers: wsgi.py
Run Code Online (Sandbox Code Playgroud)

我可以进入服务器并运行manage.py runserver,然后curl 127.0.0.1:8000从另一个终端运行,这将成功返回页面.所以我认为它必须是Apache配置的一个问题,它被设置为Elastic Beanstalk的一部分.

这里有更多的日志:

[pid 15880] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[so:warn] [pid 15880] AH01574: module wsgi_module is already loaded, skipping
[auth_digest:notice] [pid 15880] AH01757: generating secret for digest authentication ...
[lbmethod_heartbeat:notice] [pid 15880] AH02282: No slotmem from mod_heartmonitor
[mpm_prefork:notice] [pid 15880] AH00163: Apache/2.4.9 (Amazon) mod_wsgi/3.4 Python/2.7.5       configured -- resuming normal operations
[core:notice] [pid 15880] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[:error] [pid 15881] /opt/python/run/venv/lib/python2.7/site-packages/numpy/oldnumeric/__init__.py:11: ModuleDeprecationWarning: The oldnumeric module will be dropped in Numpy 1.9
[:error] [pid 15881]   warnings.warn(_msg, ModuleDeprecationWarning)
[:error] [pid 15881] 
[core:error] [pid 15884] [client 10.248.110.45:58996] Script timed out before returning headers: wsgi.py
Run Code Online (Sandbox Code Playgroud)

还有我的wsgi.py文件:

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "aurora.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Run Code Online (Sandbox Code Playgroud)

有什么可能导致这种情况的线索?

更新:

我重建了我的环境并再次遇到了这个问题.我更新/etc/httpd/conf.d/wsgi.conf了包含WSGIApplicationGroup %{GLOBAL} 在这里提到的.我使用的是Scipy,Numpy和GeoDjango(使用GDAL).我知道GDAL不是完全线程安全的,我不确定其他的,但我认为这是一个线程安全问题.

Mei*_*tro 12

2017年2月8日更新

以前我wsgi.conf只使用一个过程:

WSGIDaemonProcess wsgi processes = 1 threads = 15 display-name =%{GROUP}

我将流程提升到更合理的程度,并且没有任何问题:

WSGIDaemonProcess wsgi processes = 6 threads = 15 display-name =%{GROUP}

这种变化以及最初的添加WSGIApplicationGroup %{GLOBAL}似乎已经成功了.

2015年9月17日更新

我偶尔会遇到这个问题.通常,重新部署通过eb deploy修复问题.很难说底层问题是什么.

原始答案

我最终让项目工作,但后来尝试创建一个用于新实例的图像,重新打开了问题.我不确定为什么它工作然后停止工作但我从头开始重建我的自定义AMI然后重新推出我的项目.事实证明这是一个问题wsgi.py.我发布的版本实际上与部署的版本不同.出于某种原因,另一位开发人员将此放入wsgi.py:

path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
if path not in sys.path:
sys.path.append(path)
Run Code Online (Sandbox Code Playgroud)

我删除了它,它修复了问题.

我对任何人的建议

Script timed out before returning headers: wsgi.py
Run Code Online (Sandbox Code Playgroud)

是检查你wsgi.py文件.


Chr*_* W. 5

我们的解决方法是WSGIApplicationGroup %{GLOBAL}根据Meistro 的回答添加设置。

您需要确保wsgi通过.ebextensions/foobar.config文件编辑配置,以便更改是永久性的。请参阅 .ebextensions 配置文档

将以下内容添加到您的.ebextensions/foobar.config文件中:

files:
  "/etc/httpd/conf.d/wsgi_custom.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      WSGIApplicationGroup %{GLOBAL}
Run Code Online (Sandbox Code Playgroud)

这将创建(或覆盖)/etc/httpd/conf.d/wsgi_custom.conf文件的内容WSGIApplicationGroup %{GLOBAL}