2011-02-03 13 views
6

Po skonfigurowaniu witryny Django i uruchomieniu na serwerze programistycznym, w końcu udało mi się dowiedzieć, jak wdrożyć ją w środowisku produkcyjnym za pomocą zalecanego mod_wsgi/apache22. Obecnie ograniczam się do wdrożenia tego na komputerze z systemem Windows XP.Django + Apache + Windows WSGIDaemonProcess Alternative

Mój problem polega na tym, że kilka widoków Django, które napisałem, używa modułu Pythona subprocess do uruchamiania programów w systemie plików. Wciąż dostaję błędy podczas pracy z subprocess.Popen Widziałem kilka pytań SO, które pytały o to, a zaakceptowaną odpowiedzią jest użycie WSGIDaemonProcess, aby poradzić sobie z problemem (z powodu uprawnień użytkownika apache, jak sądzę).

Jedynym problemem jest to, że WSGIDaemonProcess nie jest dostępny dla mod_wsgi w systemie Windows. Czy istnieje sposób, w jaki mogę używać razem mod_wsgi/apache/windows/subprocess?

+0

http://stackoverflow.com/questions/3703794/django-app-stopes-working-when-deployed-on-apache-subprocess-runs-but-fails wydaje się być to samo pytanie bez odpowiedzi . – Randy

+3

"Ciągle dostaję błędy" Zbyt mało precyzyjne, abyśmy pomogli nam. Jakie błędy, w szczególności? Proszę napisać krótki fragment kodu i rzeczywisty błąd. –

+0

Rozwiązany. Znaleziono maszynę linuksową, w której dostępny jest WSGIDaemonProcess. – Randy

Odpowiedz

1

W każdym razie nie jest dobrym pomysłem otwieranie podprocesów z poziomu mod_wsgi.

Alternatywą (i wspólną) jest użycie mod_proxy na stronie apache i przekazywanie żądań z apache do serwera WSGI z Django. Ma to tę zaletę, że przesuwa wątek (y) Pythona poza obszar pamięci Apache. Istnieją dziesiątki opcji dla wsgi servers; tornado i gunicorn to dwa popularne wybory, a gunicorn integruje się * z Django.

* przez integrację Mam na myśli, że udostępnia komendę manage.py, jeśli dodasz ją do INSTALLED_APPS.

1

Wpadłem na kilka problemów, próbując użyć podprocesu w tej konfiguracji. Ponieważ nie jestem pewien, z czym konkretnie miałeś problemy, mogę podzielić się kilkoma rzeczami, które nie były dla mnie łatwe do rozwiązania, ale z perspektywy czasu wydają się dość trywialne.

  1. Otrzymałem błędy związane z uprawnieniami podczas próby uruchomienia aplikacji. Szukałem trochę, ale miałem trudności ze znalezieniem odpowiedzi specyficznych dla systemu Windows. Ten był oczywisty: zmieniłem użytkownika, w którym Apache uruchamia się na użytkownika z wyższymi uprawnieniami. (Zauważ, że są z tym związane konsekwencje bezpieczeństwa, więc chcesz mieć pewność, że rozumiesz, do czego dążysz).
  2. Django (w zależności od konfiguracji) może przechowywać łańcuchy w formacie Unicode. Miałem aplikację wiersza poleceń, którą próbowałem uruchomić z pewnymi parametrami z mojego widoku, która uległa awarii mimo podania prawidłowych argumentów. Po kilku godzinach frustracji zrobiłem typ (args), który zwrócił <type 'unicode'> zamiast mojego oczekiwanego ciągu. Szybka konwersja rozwiązała ten problem.