Django 서비스하기
Apache + mod_wsgi
(TODO)
Apache + mod_python
(TODO)
FastCGI
(TODO)
Twisted
Twisted는 다양한 프로토콜을 지원하는 경량 서버 데몬으로, 웹서버를 포함 여러 종류의 데몬이 붙어 돌아갈 수 있게 되어 있다. Twisted에서 제공하는 WSGI wrapper를 이용하면 Django도 비교적 간단하게 붙여서 돌릴 수 있다.
우선 다음과 같은 startup script가 필요하다. (보래색 표시한 곳은 자신의 상황에 맞게 고쳐서 사용)
- twistd_server.py
- #! /usr/bin/env python
# -*- coding: utf-8 -*-
import os.path, os, re, sys
from twisted.web2 import log, wsgi, resource
from twisted.internet import reactor
def make_wsgi(request):
os.environ['PATH_INFO'] = request.path # for basehttp module
os.environ['SCRIPT_URL'] = request.path # for correct url routing
from django.core.handlers.wsgi import WSGIHandler
from django.core.servers.basehttp import AdminMediaHandler
return wsgi.WSGIResource(AdminMediaHandler(WSGIHandler()))
class ArbitrarySettingsDecide(resource.Resource):
addSlash = True
def locateChild(self, request, segments):
return self, ()
def renderHTTP(self, request):
return make_wsgi(request)
if __name__ == '__builtin__':
from twisted.application import service, strports
from twisted.web2 import server, vhost, channel
from twisted.python import util
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
os.environ['DJANGO_SETTINGS_MODULE'] = 'MYPROJECT.settings'
test_site = ArbitrarySettingsDecide()
res = log.LogWrapperResource(test_site)
log.DefaultCommonAccessLoggingObserver().start()
# Create the site and application objects
site = server.Site(res)
application = service.Application("Twisted-MYPROJECT")
from django.conf import settings
# Serve it via standard HTTP on port 8081
s = strports.service('tcp:%d' % settings.TWISTD_PORT, channel.HTTPFactory(site))
s.setServiceParent(application)
이것을 실행하려면
- twistd -y twisted_server.py
그리고 죽이려면
- xargs kill < twistd.pid
과 같이 하면 된다. 데몬으로 띄우고 싶지 않다면 -n 옵션을 추가할 수 있다.
Tip! 테스트 서버처럼 autoreload 기능을 추가하고 싶다면 이 링크의 스크립트를 twistd 대신에 사용하면 된다.
History
Last edited on 08/12/2009 10:55 by daybreaker
Comments (0)