herokuで動かすWebアプリがどんなプロセスを使うかを定義するProcfile
。
Procfile
はドキュメントルートに置き、例えばFlask
+ gunicorn
を使うときには web: gunicorn app:app
とする。古事記にもそう書いてある(heroku公式ドキュメントやいろいろなブログ)
heroku公式ドキュメント: Deploying Python Applications with Gunicorn | Heroku Dev Center
その教えに従ってProcfileを作成したが一向に動かない。
Failed to find application object 'app' in 'myapp'
と表示されるばかり。
ディレクトリ構成はこんな感じ。
flask_app ├ Procfile ├ requirements.txt ├ runtime.txt └ myapp ├ myapp.py ├ static └ templates
一度myapp
ディレクトリに移動する必要があるのでは、と考えて
web: gunicorn --chdir myapp myapp:app
と書き換えたところアプリが正常に動いた。
作ったWebアプリの話はまた後日。
【追記】
アプリのディレクトリを分けずに以下のようなディレクトリ構成にすることで、Procfileにディレクトリ移動を書かなくてよくなる。アプリのディレクトリを分けているとローカルでの実行やパッケージングで不便になる、と@shimizukawaからアドバイスをもらった。ありがとうございます。
flask_app ├ Procfile ├ requirements.txt ├ runtime.txt ├ myapp.py ├ static ├ templates
また、herokuの環境変数PYTHONPATHをPYTHONPATH=myapps
と設定すると、アプリのディレクトリを分けていてもProcfile
実行時のディレクトリ移動が必要なくなる。と@shimizukawaからアドバイスをもらった。ありがとうございます。