2016-12-13 13 views
1

cherrypyの新機能で、他のWebアプリケーションで使用するためのWebサービスを作成するために選択します。私はapache2とmod_wsgiを使って実行したい。むしろold documentationに続き、こんにちは世界の例はうまくいきました。CherryPy:apache2の背後にあるWebサービスを作成する(mod_wsgi)

私は今では耳鼻咽喉科と、もちろんREST tutorialを見ています。しかし、私はそれを実行することはできません。私は、ステータス500とApacheのログにエラーが発生します。

TypeError: expose_() missing 1 required positional argument: 'func' 

でもそこまで取得するには、私は、Apacheで動作するようにハロー世界の例とチュートリアル類似したからスクリプトを調整する:

import sys 
sys.stdout = sys.stderr 

import random 
import string 

import cherrypy 

cherrypy.config.update({'environment': 'embedded'}) 

@cherrypy.expose 
class StringGeneratorWebService(object): 

    @cherrypy.tools.accept(media='text/plain') 
    def GET(self): 
     return cherrypy.session['mystring'] 

    def POST(self, length=8): 
     some_string = ''.join(random.sample(string.hexdigits, int(length))) 
     cherrypy.session['mystring'] = some_string 
     return some_string 

    def PUT(self, another_string): 
     cherrypy.session['mystring'] = another_string 

    def DELETE(self): 
     cherrypy.session.pop('mystring', None) 


conf = { 
    '/': { 
     'request.dispatch': cherrypy.dispatch.MethodDispatcher(), 
     'tools.sessions.on': True, 
     'tools.response_headers.on': True, 
     'tools.response_headers.headers': [('Content-Type', 'text/plain')], 
    } 
} 
cherrypy.quickstart(StringGeneratorWebService(), '/', conf) 

何私は間違っている?

答えて

1

問題1:

TypeError: expose_() missing 1 required positional argument: 'func' 

は、私はアナコンダパイソンや古くなっ​​でインストールCherryPyにのバージョン(3.8.0)を使用しているという事実によって引き起こされました。そのバージョンを削除してpipで最新バージョンをインストールすると、これが解決されました。

問題2:

間違っルーティング。

cherrypy.quickstart(StringGeneratorWebService(), '/', conf) 

は、ちょうどあなたのスクリプトファイルへのパスを入力すると動作します

cherrypy.Application(StringGeneratorWebService(), script_name=None, config=conf) 

でなければなりません。

問題3:

CherryPyにセッションがメモリにデフォルトごとにあり、それはmod_wsgiをとうまく再生されません。セッションのためにファイルストアを使用する必要があります(例:設定を調整します

conf = { 
'/': { 
    'request.dispatch': cherrypy.dispatch.MethodDispatcher(), 
    'tools.sessions.on': True, 
    'tools.sessions.storage_type': 'file', 
    'tools.sessions.storage_path': '/path/to/sessions', # in case of 500 error check privileges of session folder!!! 
    'tools.response_headers.on': True, 
    'tools.response_headers.headers': [('Content-Type', 'text/plain')] 
} 

}

+0

を私は本当にそれがまっすぐ自分のチュートリアルのいずれかからの 'SCRIPT_NAME = NONE' – webKnjaZ

+1

のポイントを理解していません。間違いは「cherrypy.quickstart」対「cherrypy.Application」でした。このように、それは動作し、同じ問題を抱えている人にとっては下線が間違っています。注:個人的に私はこれを私の誇りのために働かせる必要がありましたが、ドキュメンテーションが疎で時には旧式であるため、別のフレームワークを選択することをお勧めします。 –

+0

なぜこれが下落したのですか? – laserpython

関連する問題