Python → mod_wsgi 3.1 вышел 25 ноября
Что было нового в версии 3.0:
И ещё множество исправлений и улучшений, о которых можно почитать в оригинале тут: code.google.com/p/modwsgi/wiki/ChangesInVersion0301
Скачать, как обычно можно тут:
code.google.com/p/modwsgi/downloads/list
UPD:
Да, всё работает
./configure --with-python=python3.1 --disable-framework
make && sudo make install
- Поддержка питона 3.1 и выше.
- Опции «process-group», «application-group», «callable-object» и «pass-authorization» могут быть размещены в директивах WSGIscriptAlias и WSGIscriptAliasMatch
- Если клиент обрывает соединение в процессе обработки итератора вместо «бросания исключения» теперь записывается отладочное сообщение в лог
- В директиву WSGIDaemonProcess добавлена опция «chroot», позволяющая запускать приложения более изолированно
- Добавлена глобальная директива WSGIPy3kWarningFlag, при использовании python2.6 будут выдаваться предупреждения
- Исправлена «assertion error» если питон был скомпилирован с директивой Py_DEBUG
- Добавлена поддержка «Content-Type: chunked» в запросе (директива «WSGIChunkedRequest»). Данные склеиваются и передаются приложению на обработку.
- Значения HTTP заголовков теперь передаются в справочнике окружения, для хуков доступа, авторизации и аутентификации
- Флаг «flag wsgi.run_once» не выставляется в True, при работе в режиме демона, когда «maximum-requests» установлен в 1. В случае использования множества потоков, параметр «maximum-requests» проверяется только после завершения обработки запроса, поэтому нет гарантии, был ли выполнен только один запрос
- Теперь интерпретаор инициализируется не в родительском процессе, а только после того, как будет создан дочерний
- Сообщения из модулей-расширений на C попадают в логи виртуальных хостов, как и положено, а не в общий лог, как было ранее
- Теперь невозможно писать сообщения в логи «чужих» виртуальных хостов
- В режиме демона может производиться внутренняя переадресация с использоваением заголовка «Location» в ответе
- В режиме демона может использоваться директива «WSGIErrorOverride», для того, чтобы возвращать стандартные страница ошибок Apache
- Добавлена директива «WSGIPythonWarnings» работающая по аналогии с директивой «-W» интерпретатора
- В директиву «WSGIDaemonProcess» добавлена опция «cpu-time-limit» определяющая количество процессорного времени, после которого процесс будет перезапущен
- В директиву «WSGIDaemonProcess» добавлена опция «cpu-priority» говорящая за себя
- Добавлена директива «WSGIHandlerscript» позволяющая определить скрипт, обрабатывающий определённый тип файлов
И ещё множество исправлений и улучшений, о которых можно почитать в оригинале тут: code.google.com/p/modwsgi/wiki/ChangesInVersion0301
Скачать, как обычно можно тут:
code.google.com/p/modwsgi/downloads/list
UPD:
Да, всё работает
./configure --with-python=python3.1 --disable-framework
make && sudo make install
Python → Разворачиваем nginx + mod_wsgi на сервере
Здрасти. Долго-долго я присматривался к замечательному фреймворку django, читал книгу, изучал статьи, пробовал писать hello world'ы (со встроенным в джангу сервером это было легко и приятно). А вчера я попробовал настроить от начала до конца боевой сервер, и как оказалось, это не так просто, и мне даже показалось, что будь я моложе и неопытнее, я бы плюнул на это дело. Вот я и решил поделиться с читателями полной инструкцией, снабдив её некоторыми рассуждениями и конфигами. Статья расчитана на начинающих, но будет интересно всем, обещаю.
Django Framework → Рестарт демона mod_wsgi
Долго откладывал разобраться, так и релоадил апач целиком :)
UP: touch yourfile.wsgi
@never_cache
def restart(request):
''' Перезапуск демона '''
if request.META['mod_wsgi.process_group'] != '':
import signal, os
os.kill(os.getpid(), signal.SIGINT)
ret = 'restarted'
else:
ret = 'not find porcess_group'
return HttpResponse(ret, mimetype='text/plain')
UP: touch yourfile.wsgi
Django Framework → Используем память разумно. Часть 2. fapws3
В предыдущей части мы начали бороться за память на 256 мегабайтном слайсе «на скорую руку». Результат был, но не столь эффектный как тот которого я добился на этот раз.
Я всегда догадывался, что причина всех моих неприятностей — apache. И чем больше я пытался его настраивать, тем больше в этом убеждался. Вывод? Попробовать заменить. Одно но — переход должен быть как можно более плавным, поскольку речь, ясно дело, о продакшене.
Поскольку у меня был опыт общения с nginx, а если быть точным — опыт с проксированием, то был выбран именно этот веб-сервер. К тому же у него хорошие параметры производительности.
Я всегда догадывался, что причина всех моих неприятностей — apache. И чем больше я пытался его настраивать, тем больше в этом убеждался. Вывод? Попробовать заменить. Одно но — переход должен быть как можно более плавным, поскольку речь, ясно дело, о продакшене.
Поскольку у меня был опыт общения с nginx, а если быть точным — опыт с проксированием, то был выбран именно этот веб-сервер. К тому же у него хорошие параметры производительности.
Django Framework → Используем память разумно, или mod_wsgi на 256 мегабайтах
Какое-то время назад потребовалось перенести проекты с выделенного сервера на VPS. Для этих целей был выбран slicehost. В общем и целом контора нравится и готов её рекомендовать всем.
Случилась лишь одна проблема: начали приходить уведомления о слишком сильном использовании диска (чтение/запись). Долгое время проблема не находила решения из-за отсутствия времени, но это вылилось в непонятные отказы, сопровождавшиеся статистикой в >200% CPU usage. После долгих извращений, была найдена проблема, а затем и её решение.
Случилась лишь одна проблема: начали приходить уведомления о слишком сильном использовании диска (чтение/запись). Долгое время проблема не находила решения из-за отсутствия времени, но это вылилось в непонятные отказы, сопровождавшиеся статистикой в >200% CPU usage. После долгих извращений, была найдена проблема, а затем и её решение.