вторник, 19 февраля 2008 г.

В продолжение темы автономных Джанго-приложений

Продолжение поста 1 минута для старта

Моё маленькое приложение на базе Instant Django работало прекрастно, пока им пользовался один человек. Потом "програмка" понравилась всем сотрудникам отдела и они дружно начали юзать её по сети. И програмка начала дружно виснуть :)

Поспрашивав здесь и здесь получил ценный ответ:
"Девелопмент веб-сервер, входящий в состав Джанго не предназначен для обработки запросов от нескольких пользователей."

То-есть запустив manage.py runserver только один пользователь сможет комфортно работать с приложением. Для работы нескольких пользователей нужно использовать другой веб-сервер. Например - Апач.

Меня не устраивала перспектива топать к друзьям в офис и обьяснять их руководству, зачем им нужен Апач. Тем более что бос был не в курсе, что его подопечные юзают "левое" приложение.

Решением стало использование веб-сервера CherryPy из фреймворка TurboGears. Как использовать CherryPy с Django подробно описано у Гордона Тиллмана.

Вкратце:
1. скачать пакет с CherryPy и поместить его в папку ../Python/lib/site-packages/
2. в папке нашего Джанго-приложения создать 2 файла конфигурации: pieserver.conf и pieserver.py

pieserver.conf

[global]
server.socket_host = "127.0.0.1" #IP вашей машины
server.socket_port = 8080
server.thread_pool = 10
log.screen=True
environment = 'production'


pieserver.py

import sys
import os
import cherrypy

from django.core.handlers.wsgi import WSGIHandler
from django.core.servers.basehttp import AdminMediaHandler

os.environ["DJANGO_SETTINGS_MODULE"] = "YOURSITE.settings"

class DjangoApp(object):
django_conf = {
'/YOURAPP/media' : {
'tools.staticdir.on' : True,
'tools.staticdir.root' : os.path.abspath(os.path.join(os.path.dirname(__file__),'YOURPROJECT','YOURAPP')),
'tools.staticdir.dir' : 'media',
}
}

if __name__ == '__main__':
sys.path.insert(0,"..")
conf = os.path.join(os.path.dirname(__file__), 'pieserver.conf')
cherrypy.config.update(conf)
cherrypy.tree.graft(AdminMediaHandler(WSGIHandler()), '/')
cherrypy.server.quickstart()
cherrypy.engine.start()


Подкоректируйте параметры staticdir по своему вкусу.

Настройка закончена. Осталось запустить pieserver.py

2 комментария:

Scater комментирует...

http://gears.google.com/
http://labs.adobe.com/technologies/air/

:) комментирует...

Да, Google Gears это большой шаг вперед для браузерных приложений.
Но в нем все еще нет поддержки сервер-сайд скриптов :(