Альтернатива Django + Apache + Windows WSGIDaemonProcess - PullRequest
6 голосов
/ 03 февраля 2011

После настройки сайта django и его запуска на сервере dev я наконец-то нашел способ развернуть его в производственной среде, используя рекомендованный mod_wsgi / apache22. В настоящее время я ограничен развертыванием этого на компьютере с Windows XP.

Моя проблема в том, что несколько написанных мною представлений django используют модуль python subprocess для запуска программ в файловой системе. Я продолжаю получать ошибки при запуске subprocess.Popen Я видел несколько SO вопросов, которые задавались по этому поводу, и принятый ответ - использовать WSGIDaemonProcess для решения проблемы (я полагаю, из-за разрешений пользователя apache).

Единственная проблема в этом заключается в том, что WSGIDaemonProcess недоступен для mod_wsgi в Windows. Можно ли как-нибудь использовать mod_wsgi / apache / windows / subprocess вместе?

Ответы [ 2 ]

1 голос
/ 06 января 2012

Я столкнулся с парой проблем, пытаясь использовать подпроцесс в этой конфигурации. Поскольку я не уверен, с чем конкретно у вас были проблемы, я могу поделиться несколькими вещами, которые мне было нелегко решить, но в ретроспективе они кажутся довольно тривиальными.

  1. Я получал ошибки, связанные с разрешениями, при попытке выполнить приложение. Я искал довольно много, но мне было трудно найти конкретные ответы Windows. Это было очевидно: я изменил пользователя, под которым работает Apache, на пользователя с более высокими разрешениями. (Обратите внимание, что это имеет последствия для безопасности, поэтому вы должны быть уверены, что понимаете, к чему вы стремитесь).
  2. Django (в зависимости от вашей конфигурации) может хранить строки как Unicode. У меня было приложение командной строки, которое я пытался запустить с некоторыми параметрами из моего представления, которые терпели крах, несмотря на то, что были переданы правильные аргументы. После пары часов разочарования я сделал тип (args), который возвратил <type 'unicode'> вместо ожидаемого строка. Быстрое преобразование решило эту проблему.
1 голос
/ 25 августа 2011

В любом случае, не стоит открывать подпроцессы изнутри mod_wsgi.

Альтернативой (и распространенной) является использование mod_proxy на стороне apache и пересылка запросов от apache на сервер WSGI под управлением Django. Преимущество этого заключается в перемещении потока (ов) Python из пространства памяти Apache. Для wsgi-серверов существуют десятки вариантов ; Торнадо и Гуникорн - два популярных варианта, и Гуникорн объединяется * с Джанго.

* под интеграцией я имею в виду, что она предоставляет команду manage.py, если вы добавите ее в INSTALLED_APPS.

...