2011-07-17 3 views
1

bottleとはどのようにMiddleStormミドルウェアを使用しますか? 私はthis exampleに続き、SessionMiddlewareをMiddleStormに置き換えましたが、動作させることができません。MiddleStormミドルウェア(ボトル付き)

from bottle import * 
from storm.locals import * 
from middlestorm import MiddleStorm 

#other bottle code like this here... 
@get('/') 
    def index(): 
    return 'index' 

db = create_database("mysql://user:[email protected]/mydb") 
myapp = MiddleStorm(app, db) 
run(app=myapp, reloader=True, host='0.0.0.0', port=4321) 

私はコンソールにこのエラーが表示されます。

exceptions.TypeError: __call__() takes exactly 1 argument (3 given) 

私はmyappというの行を変更した場合:

myapp = MiddleStorm(app(), db) 

私は、Webページ上でこのエラーが発生します。

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/bottle-0.9.5-py2.7.egg/bottle.py", line 651, in _handle 
    return callback(**args) 
    File "/usr/local/lib/python2.7/dist-packages/bottle-0.9.5-py2.7.egg/bottle.py", line 1143, in wrapper 
    rv = callback(*a, **ka) 
TypeError: decorator() takes exactly 1 argument (0 given) 

編集:bottle、storm、middles私はmyappに= MiddleStormにmyappのラインをchane場合(dafault_app、デシベル)私はこのエラーを取得する:

Traceback (most recent call last): 
    File "/usr/lib/python2.7/wsgiref/handlers.py", line 85, in run 
self.result = application(self.environ, self.start_response) 
    File "/usr/local/lib/python2.7/dist-packages/middlestorm-0.8.1-py2.7.egg/middlestorm.py", line 68, in __call__ 
    return self._app(environ, start_response) 
TypeError: __call__() takes exactly 1 argument (3 given) 
homer - - [17/Jul/2011 16:28:42] "GET/HTTP/1.1" 500 59 

はEDIT3:@zeekayコードで、私はまだ、このエラーが出る:

TORMは

EDIT2をインストールされています

Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/bottle-0.9.5-py2.7.egg/bottle.py", line 651, in _handle 
    return callback(**args) 
    File "/usr/local/lib/python2.7/dist-packages/bottle-0.9.5-py2.7.egg/bottle.py", line 1143, in wrapper 
    rv = callback(*a, **ka) 
TypeError: decorator() takes exactly 1 argument (0 given) 

答えて

3

実際にdefault_appappは同義です。これはうまくいくはずです:

myapp = MiddleStorm(app(), db) 

ちょうど簡単にテストすると、私にとってはうまくいくようです。

from bottle import * 
from storm.locals import * 
from middlestorm import MiddleStorm 

@get('/') 
def index(): 
    return 'index' 

db = create_database("sqlite://test.db") 
myapp = MiddleStorm(app(), db) 
run(app=myapp, reloader=True, host='0.0.0.0', port=4321) 

ファイルにドロップして実行するだけで済みます。

+0

この回答をもう少し説明すると、ミドルウェアは実際のwsgiアプリをラップすることを期待していますが、ボトル内のリクエストハンドラはそうではなく、むしろボトルがwsgiアプリを構築するためにそれらを使用しています。 – SingleNegationElimination

+0

更新された質問をご覧ください。私はまだエラーが発生します。 – redman

+0

@zeekay私は私の答えを更新しましたが、私はまだエラーが発生します:/ – redman

関連する問題