Python + lighttpd + CGI: любые веб-фреймворки?

Я застрял на этом сервере без root-доступа. Он имеет Python 2.6.5 и запускает lighttpd, обслуживающий все сценарии Python под CGI. Да, старый добрый CGI. К сожалению, мне приходится использовать только этот сервер, поэтому переход на более адекватный хостинг не вариант. Итак, мой вопрос: существуют ли какие-либо веб-фреймворки для Python, которые я могу использовать в этих обстоятельствах? Я пробовал Django, web.py и Flask без каких-либо успехов, кроме ошибки HTTP 500, но, возможно, я просто что-то упустил.

Опять же, требования:

  • Питон 2.6.5
  • лайтпд
  • старый добрый CGI
  • нет корневого доступа

Спасибо.


person Skiminok    schedule 31.03.2013    source источник


Ответы (1)


Какому-то блестящему парню удалось заставить его работать на виртуальной среде через mod_cgi. Вам нужен мост CGI-WSGI между mod_cgi и вашим проектом Django (который действительно приложение WSGI). Есть несколько вещей, которые нужно адаптировать, например, если вы используете virtualenv (что я настоятельно рекомендую вам сделать).

Сценарий хорошо продуман, но я предполагаю, что все еще существует вероятность того, что request.FILES может быть неправильно обработана. Надеюсь, вы не используете загрузку файлов. Кроме того, обратите внимание, что при использовании CGI производительность будет снижаться, поскольку все ваше приложение перезагружается для каждого запроса. Используя FastCGI или простой WSGI, можно запустить несколько экземпляров вашего проекта до фактического обслуживания запросов, и каждый экземпляр может обрабатывать несколько запросов в течение своего жизненного цикла (по одному за раз). Это позволяет вам иметь гораздо более быстрое время загрузки, так как все по-прежнему предварительно загружается из предыдущего запроса.

Также обратите внимание, что эту функциональность можно воспроизвести в файле .cgi: вы можете запускать несколько экземпляров своего приложения и писать в их сокеты, используя ротацию random.random для балансировки нагрузки.

person sleblanc    schedule 31.03.2013
comment
Итак, чтобы наконец ответить на ваш вопрос: да, практически любая среда Python может работать с CGI, используя некоторый мост. Будет ли он работать надежно? Я не знаю. Будет ли он предлагать хорошую производительность? Возможно нет. - person sleblanc; 31.03.2013
comment
В lighttpd.conf на сервере есть следующая строка: cgi.assign = ( ".py" => "/usr/bin/python" ) Похоже, никакие изменения в virtualenv и shebang не помогут, так как lighttpd всегда будет пытаться запускать мои скрипты под обычным интерпретатором Python. Я сделал все по этой инструкции и все равно получаю ошибку 500. Также lighttpd не поддерживает локальные файлы .htaccess. - person Skiminok; 01.04.2013
comment
Да, файлы .htaccess совместимы только с Apache. У вас есть какие-либо журналы ошибок, кроме этой ошибки 500? Проблема может быть связана с перезаписью URL-адреса, что в основном пытается исправить файл htaccess. Перезапись URL-адресов — это метод, с помощью которого веб-серверы повторно обрабатывают запрос после манипулирования его частями. Вы по-прежнему можете получить доступ к своему приложению через //example.com/yourwsgi.(py|cgi)/your/request/path/?foo=bar - person sleblanc; 01.04.2013
comment
Википедия, например, использует перезапись для красивых ссылок: /wiki/Main_Page обрабатывается и переписывается внутри на /w/index.php?title=Main_Page. Большинство механизмов перезаписи позволяют делать довольно впечатляющие вещи, но вы можете застрять с передачей всех ваших запросов в свой CGI-скрипт, поскольку у вас нет прав для его настройки. - person sleblanc; 01.04.2013
comment
Как ни странно, в журнале ошибок нет ничего важного. И я получил все свои 500 ошибок, когда обратился к скрипту напрямую по его URL-адресу .py. Я не пытался перезаписывать URL, так как не могу изменить lighttpd.conf. - person Skiminok; 01.04.2013
comment
Умеете ли вы запускать простейшие CGI-скрипты под Python? Что-то вроде скрипта, который содержит только простые операторы print, чтобы посмотреть, запустится ли он... - person sleblanc; 02.04.2013
comment
Да, конечно. Я проверил это в первую очередь, и простые скрипты работают без проблем. Я даже могу запускать исполняемые файлы из своего домашнего каталога через модуль subprocess. - person Skiminok; 03.04.2013