Mam projekt Django działający za Nginx i Gunicorn. Jedna z aplikacji współpracuje z urządzeniami sieciowymi za pomocą Exscript, który z kolei korzysta z Paramiko. Niektóre urządzenia nie działają poprawnie, gdy znajdują się za Gunicornem.Czy gunicorn może spowodować problem z exscript/paramiko?
Ten sam dokładny kod zadziała dobrze z poziomu powłoki django-admin. Będzie również działać, jeśli uruchomię wbudowany serwer Django, ale nadal otrzymuję błąd, jeśli pomijam Nginx i łączę się bezpośrednio z Gunicorn.
Próbowałem przenieść funkcję do zadania selera, miał ten sam dokładny problem, ale tylko za Gunicorn.
Napisałem skrypt używając django-extensions, który działa z linii poleceń, ale zawiedzie, jeśli zostanie wywołany przez podproces. Ale tylko za Gunicornem.
Wszystkie urządzenia, które ulegają awarii, wydają się być modułami LTM F5 i wygląda na to, że bufor w obiekcie exscript jest w jakiś sposób modyfikowany. Gdybym miał zgadywać, powiedziałbym, że Gunicorn i Exscript/Paramiko w jakiś sposób nadepną sobie na pamięć innych, a może Gunicorn ustawia pewną zmienną środowiskową, którą odbiera Exscript.
W każdym razie jestem całkowicie zaskoczony i docenię wszelkie wskazówki, jak rozwiązać ten problem.
W jaki sposób zainstalowałeś paramiko? Z pakietem OS? Z pip? Czy używasz virtualenv? Czy jesteś pewien, że gunicorn używa tego samego paramiko co linia poleceń? –
Parimiko został zainstalowany z pipem i tylko w virtualenv, którego używa gunicorn. Dobry pomysł. –
Jeśli nadal masz problem, zwróć uwagę na to, który typ uczestnika (http://gunicorn-docs.readthedocs.org/en/latest/run.html#commonly-used-arguments) używasz w gunicorn? Kiedy mówisz, że się nie powiedzie, możesz wyjaśnić, co dokładnie się dzieje (wyjątek, proces się zawiesza, itp.)? – tutuDajuju