首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用twistd服务于金字塔应用程序

使用twistd服务于金字塔应用程序
EN

Stack Overflow用户
提问于 2012-10-29 21:24:51
回答 2查看 953关注 0票数 2

我有一个金字塔应用程序,里面也有一些Twisted代码,所以我想使用twistd来服务于这个应用程序,一举两得。

这是我的.tac文件:

代码语言:javascript
复制
from twisted.web.server import Site
from twisted.web.wsgi import WSGIResource
from twisted.internet import reactor
from twisted.application import internet, service
import os

from pyramid.paster import get_app, setup_logging

config='/path/to/app/production.ini'
config = os.path.abspath(config)
port = 8888

application = get_app(config, 'main')

# Twisted WSGI server setup...
resource = WSGIResource(reactor, reactor.getThreadPool(), application)
factory = Site(resource)

service = internet.TCPServer(port, factory)

service.setServiceParent(application)

要运行此命令,我使用了:

代码语言:javascript
复制
twistd -y myApp.tac

我收到错误消息,告诉我get_app()方法没有返回可以以这种方式使用的对象。例如:

代码语言:javascript
复制
"Failed to load application: 'PrefixMiddleware' object has no attribute 'addService'"

使用twistd运行金字塔应用程序的最佳方式是什么?

EN

回答 2

Stack Overflow用户

发布于 2012-10-30 20:05:15

您可以使用Twisted Web的twistd插件中的WSGI支持来缩短此过程,并使其更易于配置。像这样创建一个模块:

代码语言:javascript
复制
from pyramid.paster import get_app

config = '/path/to/app/production.ini'
myApp = get_app(config, 'main')

然后像这样运行twistd

代码语言:javascript
复制
$ twistd web --port tcp:8888 --wsgi foo.myApp

其中foo是您创建的模块的名称。

票数 3
EN

Stack Overflow用户

发布于 2012-10-29 22:56:49

我找到了一个可行的解决方案。以下是工作的.tac文件:

代码语言:javascript
复制
from twisted.web.server import Site
from twisted.web.wsgi import WSGIResource
from twisted.internet import reactor
from twisted.application import internet, service
import os

from pyramid.paster import get_app, setup_logging

config='/path/to/app/production.ini'
config = os.path.abspath(config)
port = 8888

# Get the WSGI application
myApp = get_app(config, 'main')

# Twisted WSGI server setup
resource = WSGIResource(reactor, reactor.getThreadPool(), myApp)
factory = Site(resource)

# Twisted Application setup
application = service.Application('mywebapp')
internet.TCPServer(port, factory).setServiceParent(application)

get_app()获取金字塔WSGI应用程序,而internet.TCPServer需要一个Twisted application对象,所以不要混淆这两个对象。

此代码将在TCP端口8888上启动应用程序。

如果有人有更好/更清晰的方法来实现这一点,请添加您的答案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13122519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档