2017-07-26 11 views
1

GAEに引数として製品の詳細(文字列)を取り込むPython価格設定モジュールをデプロイしようとしています。 localhost(localhost:8888 /?q =)ではトルネードラッパーが正常に動作していますが、GAEでサーバーエラー500が発生しています。 Pricing-OOP.pyファイル内Google App Engineにトルネードをデプロイする

コード:

class MainHandler(tornado.web.RequestHandler): 
    def get(self): 
     q = self.get_query_argument("q") 
     res = Pricing(q).pricing() 
     self.write(json.dumps(res)) 

def make_app(): 
    return tornado.web.Application([ 
     (r"/", MainHandler), 
    ],debug=True) 

if __name__ == '__main__': 
    Pickleload() 
    app = make_app() 
    container = tornado.wsgi.WSGIContainer(app) 
    http_server = tornado.httpserver.HTTPServer(container) 
    http_server.listen(8888) 
    tornado.ioloop.IOLoop.current().start() 

のapp.yamlファイル:

service: tornado 
runtime: python27 
threadsafe: no 

handlers: 
- url: /.* 
    script: Pricing-OOP.py 

のgcloudアプリログのテールを次のとおりです。

2017-07-26 03:03:30 tornado[20170726t082447] "GET/HTTP/1.1" 500 
2017-07-26 03:03:30 tornado[20170726t082447] "GET /favicon.ico HTTP/1.1" 500 
2017-07-26 03:03:33 tornado[20170726t082447] "GET/HTTP/1.1" 500 
2017-07-26 03:03:34 tornado[20170726t082447] "GET /favicon.ico HTTP/1.1" 500 

はどのように行います私はこれを正す?

答えて

2

the Tornado docsにGoogle App Engineでの導入に関するいくつかの注意点があります。

特に、GAEのTornadoアプリケーションは、WSGIアプリケーションとして実行する必要があります。ローカルマシンのオープンポート( )のようなことはできません。残念なことに、これはTornadoの非同期機能(これはしばしば最初にそれを使用する主なドライバです)の使用を妨げます。

# Pricing-OOP.py 
# ... 
def make_app(): 
    return tornado.web.Application([ 
     (r"/", MainHandler), 
    ],debug=False) 

application = make_app() 
application = tornado.wsgi.WSGIAdapter(application) 

あなたはその後、どこ設定ファイルのscriptディレクティブでそれを参照してapplicationを見つけるためにGAEに伝える:

、代わりに HttpServer自分自身を作成する、あなたのケースで

は、あなただけのWSGIAdapterを作成する必要があります

# app.yaml 
# ... 
handlers: 
- url: /.* 
    script: Pricing-OOP.application 

「純粋な」WSGIアプリケーションであるため、コンテナで実行する必要があります。 Google Cloud SDKには、アプリケーションをホストするために使用できる開発サーバーが含まれています。

$ dev_appserver.py #in app.yamlを含むディレクトリ

これで、ローカルとGAEインスタンスの両方で同じアプリケーションコードを実行できます。

+0

'debug = False'は重要です。なぜなら、' True'に設定しておくと、Tornadoはlocalhostポートを開こうとし、起動時にAccessDenied例外が発生するからです。 –

関連する問題