私の質問は基本的にタイトルの内容です.gunicornをセットアップしてweb.pyアプリを実行するにはどうすればよいですか? (また、違いがある場合、herokuでどうすればいいですか?)
組み込みのcherrypyを使用してherokuでアプリを実行していますが、gunicornをweb.pyで動作させることができませんでした(どこから始めればよいかわかりません-チュートリアルが見つかりませんでした)。
残念ながら 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 アプリケーションが公開されません。
wsgifunc
web.py は の方法でWSGI アプリケーションを提供しますweb.application
。index
クラスの後に以下を追加することで、これを 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