2011-02-17 61 views
3

我在扭曲的世界初學者,所以第一次我試圖讓下扭曲配置我的工作Django項目,目前它的Django的測試服務器或Apache通過的mod_wsgi上運作良好。扭曲掛起,而守護進程

我跟着這個linkthis too配置設置的基礎上,我有波紋管

給予server.py文件所以,爲了Django應用程序與扭曲我用下面的代碼集成,

import sys 
import os 

from twisted.application import internet, service 
from twisted.web import server, resource, wsgi, static 
from twisted.python import threadpool 
from twisted.internet import reactor 
from django.conf import settings 
import twresource # This file hold implementation of "Class Root". 


class ThreadPoolService(service.Service): 
    def __init__(self, pool): 
     self.pool = pool 

    def startService(self): 
     service.Service.startService(self) 
     self.pool.start() 

    def stopService(self): 
     service.Service.stopService(self) 
     self.pool.stop() 

class Root(resource.Resource): 
    def __init__(self, wsgi_resource): 
     resource.Resource.__init__(self) 
     self.wsgi_resource = wsgi_resource 

    def getChild(self, path, request): 
     path0 = request.prepath.pop(0) 
     request.postpath.insert(0, path0) 
     return self.wsgi_resource 

PORT = 8080 

# Environment setup for your Django project files: 
#insert it to first so our project will get first priority. 
sys.path.insert(0,"django_project") 
sys.path.insert(0,".") 

os.environ['DJANGO_SETTINGS_MODULE'] = 'django_project.settings' 
from django.core.handlers.wsgi import WSGIHandler 

def wsgi_resource(): 
    pool = threadpool.ThreadPool() 
    pool.start() 
    # Allow Ctrl-C to get you out cleanly: 
    reactor.addSystemEventTrigger('after', 'shutdown', pool.stop) 
    wsgi_resource = wsgi.WSGIResource(reactor, pool, WSGIHandler()) 
    return wsgi_resource 


# Twisted Application Framework setup: 
application = service.Application('twisted-django') 

# WSGI container for Django, combine it with twisted.web.Resource: 
# XXX this is the only 'ugly' part: see the 'getChild' method in twresource.Root 

wsgi_root = wsgi_resource() 
root = Root(wsgi_root) 

#multi = service.MultiService() 
#pool = threadpool.ThreadPool() 
#tps = ThreadPoolService(pool) 
#tps.setServiceParent(multi) 
#resource = wsgi.WSGIResource(reactor, tps.pool, WSGIHandler()) 
#root = twresource.Root(resource) 


#Admin Site media files 
#staticrsrc = static.File(os.path.join(os.path.abspath("."), "/usr/haridas/eclipse_workplace/skgargpms/django/contrib/admin/media/")) 
#root.putChild("admin/media", staticrsrc) 

# Serve it up: 
main_site = server.Site(root) 
#internet.TCPServer(PORT, main_site).setServiceParent(multi) 
internet.TCPServer(PORT, main_site).setServiceParent(application) 

#EOF. 

使用上面的代碼使用「扭曲-ny server.py」行之有效的命令行,但是當我們運行它作爲守護「扭曲-y server.py」它將掛斷,但應用程序正在監聽的端口8080.我可以使用telnet訪問它。

我發現這個問題掛一些修正計算器,從本身。它幫助我使用下面給出的代碼部分,它在上面的server.py文件中進行了評論。

multi = service.MultiService() 
pool = threadpool.ThreadPool() 
tps = ThreadPoolService(pool) 
tps.setServiceParent(multi) 
resource = wsgi.WSGIResource(reactor, tps.pool, WSGIHandler()) 
root = twresource.Root(resource) 

和: -

internet.TCPServer(PORT, main_site).setServiceParent(multi) 

,而不是使用: -

wsgi_root = wsgi_resource() 
root = Root(wsgi_root) 

和: -

internet.TCPServer(PORT, main_site).setServiceParent(application) 

改進的方法也沒有幫我避免懸而未決的問題。誰是成功的人在twisted守護進程模式下運行django應用程序?

我女僕任何錯誤,同時結合這些代碼?目前,我纔開始學習詳細的扭曲結構。請幫我解決這個問題

我要找的扭曲應用程序配置(TAC)文件,該文件與扭曲的整合Django應用程序,並與出在守護模式也是任何問題運行。

感謝和問候,

Haridas N.

回答

4

我認爲你是幾乎沒有。只需在最後添加一行:

multi.setServiceParent(application) 
+0

是的!,唯一缺失的就是那一行。現在事情運行良好,沒有任何阻塞...... 謝謝你。 – 2011-06-30 06:22:46