2

Twisted コードも含まれている Pyramid アプリを持っているので、twistd を使用してアプリを提供し、一石二鳥です。

ここに私の .tac ファイルがあります:

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)

これを実行するには、次を使用しました:

twistd -y myApp.tac

get_app() メソッドがこの方法で使用できるオブジェクトを返さないというエラーが表示されます。例えば:

"Failed to load application: 'PrefixMiddleware' object has no attribute 'addService'"

twistd を使って Pyramid アプリを実行する最良の方法は何ですか?

4

2 に答える 2

3

Twisted Web のtwistdプラグインで WSGI サポートを使用して、これを短縮し、より簡単に構成できるようにすることができます。次のようなモジュールを作成します。

from pyramid.paster import get_app

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

次にtwistd、次のように実行します。

$ twistd web --port tcp:8888 --wsgi foo.myApp

foo作成するモジュールの名前はどこにありますか。

于 2012-10-30T12:05:14.963 に答える
2

私は実用的な解決策を見つけました。作業中の .tac ファイルは次のとおりです。

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() は Pyramid WSGI アプリケーションを取得しますが、internet.TCPServer は Twisted Application オブジェクトを必要とするため、これらを混同しないでください。

このコードは、TCP ポート 8888 でアプリを起動します。

誰かがこれを実装するためのより良い/より明確な方法を持っている場合は、回答を追加してください。

于 2012-10-29T14:56:49.313 に答える