【发布时间】:2014-12-26 22:32:52
【问题描述】:
我有一个在 Nginx 和 Gunicorn 后面运行的 Django 项目。其中一个应用程序使用 Exscript 与网络设备交互,而 Exscript 又使用 Paramiko。有些设备在 Gunicorn 后面时无法正常工作。
相同的代码在 django-admin shell 中也可以正常工作。 如果我启动内置的 django 服务器,它也可以工作,但是如果我绕过 nginx 并直接连接到 Gunicorn,我仍然会收到错误消息。
我尝试将功能移至 celery 任务,它有同样的问题,但仅在 Gunicorn 之后。
我使用 django-extensions 编写了一个脚本,该脚本可以从命令行运行,但如果通过子进程调用会失败。但仅在 Gunicorn 之后。
出现故障的设备似乎都是 F5 LTM,并且看起来 exscript 对象上的缓冲区正在以某种方式被修改。如果我不得不猜测,我会说 Gunicorn 和 Exscript/Paramiko 以某种方式踩到了彼此的内存,或者 Gunicorn 正在设置 Exscript 正在接受的一些环境变量。
无论如何,我都被难住了,如果能提供任何有关如何解决此问题的指导,我将不胜感激。
【问题讨论】:
-
你是如何安装 paramiko 的?使用操作系统包?用点子?你使用虚拟环境吗?你确定 gunicorn 使用与你的命令行相同的 paramiko 吗?
-
Parimiko 是使用 pip 安装的,并且仅在 gunicorn 使用的 virtualenv 中。好主意。
-
如果您仍有问题,请评论您在 gunicorn 中使用的是哪个 runner type?当您说它失败时,您能否详细说明究竟发生了什么(异常、进程挂起等)?
-
我的猜测是,您通过 paramiko 与之交互的对象是 TTY——一个交互式终端。
标签: python django gunicorn paramiko f5