2014-10-30 8 views
10

Nginx와 Gunicorn 뒤에 장고 프로젝트가 있습니다. 응용 프로그램 중 하나는 Paramiko를 사용하여 Exscript를 사용하여 네트워크 장치와 상호 작용합니다. 일부 장치는 Gunicorn 뒤에있을 때 제대로 작동하지 않습니다.gunicorn이 exscript/paramiko에서 문제를 일으킬 수 있습니까?

정확한 코드는 django-admin 쉘에서 정상적으로 작동합니다. django 서버가 내장되어 있으면 작동하지만 여전히 nginx를 거치지 않고 Gunicorn에 직접 연결하면 오류가 발생합니다.

나는 셀러 리 작업으로 기능을 옮겨 보았는데 똑같은 문제가 있었지만 Gunicorn에서만 발생했습니다.

명령 줄에서 작동하는 django-extensions를 사용하여 스크립트를 작성했지만 하위 프로세스를 통해 호출하면 실패합니다. 그러나 Gunicorn 뒤에서 만.

모두 실패하는 장치는 F5 LTM 인 것처럼 보이며 exscript 개체의 버퍼가 어떻게 든 수정되는 것처럼 보입니다. 추측해야만한다면 Gunicorn과 Exscript/Paramiko가 어떻게 든 서로 다른 메모리를 밟거나 Gunicorn이 Exscript가 실행중인 환경 변수를 설정하고 있다고 말할 수 있습니다.

어쨌든 나는 완전히 뒤죽박죽이며, 문제를 해결하는 방법에 대한 지침을 주시면 감사하겠습니다.

+0

paramiko를 어떻게 설치 했습니까? OS 패키지가 있습니까? 핍? virtualenv를 사용합니까? 특정 gunicorn이 명령 행과 동일한 paramiko를 사용하고 있습니까? –

+0

Parimiko는 pip와 함께 설치되었으며 gunicorn이 사용하는 virtualenv에서만 설치되었습니다. 그래도 좋은 생각. –

+2

여전히 문제가 발생하는 경우 gunicorn에서 사용하는 [러너 유형] (http://gunicorn-docs.readthedocs.org/en/latest/run.html#commonlyused-arguments)에주의를 기울여야합니다. 당신이 실패했다고 말하면 정확히 무슨 일이 일어날 지 정교 할 수 있습니까? (예외, 프로세스 멈춤 등)? – tutuDajuju

답변

1

전체 예상이지만 디버깅에 도움이 될 수 있습니다. 기본적으로 모든 출력 버퍼링을 제거했는지 확인하십시오. 여기서는 여러 대형 프레임 워크를 계층화 할 때 실제로 어떤 일이 일어나고 있는지 숨길 수 있습니다.

포어 그라운드 웹 서버 프로세스 및 모든 작업자 프로세스에 대해 파이썬에서 모든 출력 버퍼링을 비활성화했는지 확인하십시오 (PYTHONUNBUFFERED 설정은 적어도 파이썬 스크립트가 버퍼링하지 않도록하는 표준 방법입니다).

터미널은 또한 디버깅을 예외적으로 어렵게 만드는 버퍼를 도입 할 수 있습니다. your commandstdbuf -o0 -e0 your command으로 변경하여 stdout 및 stderr에서 버퍼를 비활성화하는 것을 고려하십시오 (your command은 여전히 ​​활성화 할 수 있지만 대부분의 프로그램은 비활성화 할 수 있음).

+0

Upvoted 왜냐하면 내가 그 당시에는 고려하지 않았기 때문에,하지만 우리는 f5 라이브러리를 사용하여 문제를 단계적으로 끝내었다. –