4

私の質問は基本的にタイトルの内容です.gunicornをセットアップしてweb.pyアプリを実行するにはどうすればよいですか? (また、違いがある場合、herokuでどうすればいいですか?)

組み込みのcherrypyを使用してherokuでアプリを実行していますが、gunicornをweb.pyで動作させることができませんでした(どこから始めればよいかわかりません-チュートリアルが見つかりませんでした)。

4

1 に答える 1

13

残念ながら Heroku には詳しくありませんが、基本的な質問にはお答えできます。

gunicorn は、WSGI 経由で Python Web アプリを実行するための HTTP サーバーです。web.py は、WSGI を使用して Python Web アプリを作成するためのフレームワークです。

したがって、両方を一緒に使用するためのチュートリアルは実際には必要ありません。必要なのは、web.py アプリケーションの WSGI エントリ ポイントを gunicorn に渡す方法を理解することだけです。WSGI アプリケーションは、適切なインターフェイスを備えた単なる Python 呼び出し可能オブジェクトです。つまり、特定のパラメーターを受け取り、特定の応答を返します。詳細については、この WSGI チュートリアルを参照してください。

web.py チュートリアルの「hello world」アプリケーションは、次の test.py のようになります。

import web

urls = (
    '/', 'index'
)

class index:
    def GET(self):
        return "Hello, world!"

if __name__ == "__main__":
    app = web.application(urls, globals())
    app.run()

しかし、それでは、gunicorn が必要とする WSGI アプリケーションが公開されません。

wsgifuncweb.py は の方法でWSGI アプリケーションを提供しますweb.applicationindexクラスの後に以下を追加することで、これを test.py に追加できます。

# For serving using any wsgi server
wsgi_app = web.application(urls, globals()).wsgifunc()

これは基本的に、Apache + mod_wsgiを使用する場合に、web.py のドキュメントのデプロイメント セクションで行うように指示されていることです。Python コードが gunicorn と同じであるという事実は偶然ではありません。これはまさに WSGI が提供するものだからです。 WSGI 対応サーバーを使用してデプロイできるように Python を作成する標準的な方法です。

gunicorn docsで説明されているように、次のようにモジュールのwsgi_appメンバーでgunicorn を指すことができます。test

(tmp)day@office:~/tmp$ gunicorn test:wsgi_app
2012-12-03 23:31:11 [19265] [INFO] Starting gunicorn 0.16.1
2012-12-03 23:31:11 [19265] [INFO] Listening at: http://127.0.0.1:8000 (19265)
2012-12-03 23:31:11 [19265] [INFO] Using worker: sync
2012-12-03 23:31:11 [19268] [INFO] Booting worker with pid: 19268
于 2012-12-03T23:40:24.730 に答える