Посты с тэгом gunicorn


[Из песочницы] Разворачиваем Flask-приложение на Nginx используя Gunicorn


Предположим у вас есть Ubuntu в котором нужно развернуть Nginx с Flask-приложением. Вам необходимо использовать WSGI сервер, например, Gunicorn. Gunicorn (Green Unicorn) — WSGI HTTP сервер на Python для UNIX систем. Представляю вольный перевод статьи Onur Güzel «How to Run Flask Applications with Nginx Using Gunicorn», где шаг за шагом показано процесс развертывания.
Читать дальше →


asyncio, aiohttp и gunicorn

Многие WSGI сайты используют gunicorn для развертывания.

Это прекрасно работает для python 2, но для python 3 есть проблема: наиболее употребляемые gunicorn workers, -- использующие gevent и enentlet, -- не заводятся под "тройкой" потому что gevent c eventlet все еще не портированы.

Автор gunicorn Бенуа Шесно начал было писать новый asyncio worker -- но быстро увидел что работы предстоит сделать немало, а в aiohttp Николай Ким уже написал всё что нужно.

Коротко говоря aiohttp.worker переехал в gunicorn.workers.gaiohttp вместе со своими тестами, вышел новый релиз aiohttp 0.8, а мы с Колей стали commiters в gunicorn.

Бенуа планирует выпустить новый релиз gunicorn к концу недели.

К сожалению aiohttp 0.8 ломает обратную совместимость -- так было нужно.
Зато теперь он имеет более чистый API: использует


Запускаем gunicorn из Python'а

Иногда бывает надо запустить gunicorn внутри Python скрипта, например, в manage.py. Конечно всегда можно воспользоваться subprocess.call:

import subprocess


app = 'package.module:app'
host, port = '0.0.0.0', 8000
subprocess.call('gunicorn -b {}:{:d} -w 4 {}'.format(host, port, app))

Но как-то это не комильфо подумал я и решил найти более труЪ-способ :)

Решение пришло не сразу, но пришло, надо всего лишь переопределить sys.argv и вызвать метод run,

import sys

from gunicorn.app.wsgiapp import run


app = 'package.module:app'
host, port = '0.0.0.0', 8000
sys.argv = [
    sys.argv[0],
    '-b', '{}:{:d}'.format(host, port),
    '-w', '4',
    app
]
run()

Не очень круто вышло, не находите? А



Чиним gunicorn'овский Internal Server Error

Если вдруг, после запуска gunicorn перестал работать и показывает ошибку похожую на:

Internal Server Error

Traceback:

Traceback (most recent call last):
  File "/Users/playpauseandstop/Projects/project/env/lib/python2.7/site-packages/gunicorn/workers/async.py", line 45, in handle
    self.handle_request(req, client, addr)
  File "/Users/playpauseandstop/Projects/project/env/lib/python2.7/site-packages/gunicorn/workers/async.py", line 73, in handle_request
    resp, environ = wsgi.create(req, sock, addr, self.address, self.cfg)
  File "/Users/playpauseandstop/Projects/project/env/lib/python2.7/site-packages/gunicorn/http/wsgi.py", line 161, in create
    path_info = path_info.split(script_name, 1)[1]
IndexError: list index out of range

то это говорит о том, что какая-то сволочьое-то приложение установило переменную окружения SCRIPT_NAME, которую gunicorn



[Из песочницы] Боевой сервер для Django-приложения: Ubuntu Server 10.04 LTS + django 1.4 + nginx + gunicorn

Многие учебные пособия по разработке на Django раскрывают как быстро получить работающий отладочный сервер (python manage.py runserver), а вопрос развертывания в боевом режиме часто остается нераскрытым или освещаются далеко не самые простые и эффективные методы.
Ниже я расскажу о об одном из способов развернуть сайт на Django в боевом режиме, начиная от выбора хостинга, заканчивая развертыванием веб-сервера. Таким образом статья может быть полезна тем, кто освоил разработку на базе Django, но не имеет опыта развертывания серверов. Мой способ один из многих, но он достаточно прост, эффективен в работе и легок в поддержке. Используем VPS-хостинг, Ubuntu 10.04, nginx, gunicorn.

Читать дальше →



Архитектура Instagram

Instagram — всего лишь iOS, а теперь и Android, приложение для обмена фотографиями с друзьями. Последнее время находится на слуху благодаря новости о покупке проекта Facebook'ом за кругленькую сумму. Недавно один из основателей проекта, Mike Krieger, выступил на конференции с докладом о техническом аспекте проекта, который я и хотел бы вкратце пересказать.

Статистика

  • Начало:
    • 1 сервер слабее Macbook Pro
    • 25к регистраций в первый день
    • 2 разработчика
  • Сегодня:
    • 40+ миллионов пользователей
    • 100+ виртуальных серверов в EC2, в том числе:
    • Проект куплен Facebook за 1 млрд. долл
    • 1 миллион регистраций за 12 часов после запуска Androi


Архитектура Instagram

Instagram - всего лишь iOS, а теперь и Android, приложение для обмена фотографиями с друзьями. Последнее время находится на слуху благодаря новости о покупке проекта Facebook'ом за кругленькую сумму. Недавно один из основателей проекта, Mike Krieger, выступил на конференции с докладом о техническом аспекте проекта, который я и хотел бы вкратце пересказать.

Статистика

Начало:

  • 1 сервер слабее Macbook Pro
  • 25к регистраций в первый день
  • 2 разработчика

Сегодня:

  • 40+ миллионов пользователей
  • 100+ виртуальных серверов в EC2, в том числе:
  • Проект куплен Facebook за 1 млрд. долл
  • 1 миллион регистраций за 12 часов после запуска Android-верс