#Flaskアプリをherokuにデプロイ(苦苦々)
なかなか苦労させられる。
$ heroku logs --tailで遭遇したエラー
error code=H10 desc="App crashed"
error code=h14 desc="no web processes running"
など。
それぞれをStackoverflowなどで対処療法しても解決しない。
しかし下記の方法でうまく行った。
###Python仮想環境を作る
$ virtualenv flaskapp
$ cd flaskapp
#####仮想環境をアクティベイトする
$ source bin/activate
#####こんな感じになる。
$ (flaskapp) $
#####ここでマシン環境に影響を及ぼさずにpipでいろいろインストールできる。
たとえば、
$ (flaskapp) $ pip install requests
$ (flaskapp) $ pip install Flask
とかとか。
ここではgunicornとFlaskをインストールする。
$ (flaskapp) $ pip3 install Flask gunicorn
【gunicorn参考】: GunicornはpythonのWSGI(Web Server Gateway Interface) HTTP ServerでRubyのUnicornの派生。Gunicornは様々なフレームワークと比べると、とってもシンプルな実装で、軽量なサーバー。
参照:https://qiita.com/arata-honda/items/09e1c350b1bd8a186e9c
【使い方】
pip install gunicornでgunicornをインストールして、
gunicorn hello:appで起動する。
###Herokuの準備
Herokuのサインインは済んでいる前提
#####Heroku CLIインストール
$ (flaskapp) $ wget -qO- https://cli-assets.heroku.com/install-ubuntu.sh | sh
#####Herokuにログイン
$ (flaskapp) $ heroku login
######準備ファイル
- Procfile
$ echo "web: gunicorn app:app --log-file -" > Procfile
- requirements.txt
$ (flaskapp) $ pip3 freeze > requirements.txt
Click==7.0
Flask==1.1.1
gunicorn==20.0.4
itsdangerous==1.1.0
Jinja2==2.10.3
MarkupSafe==1.1.1
Werkzeug==0.16.0
- runtime.txt(任意)
$ (flaskapp) $ python -V | sed -n "s/Python /python-/p" > runtime.txt
- app.py
from flask import Flask
import os
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World!'
if __name__ == "__main__":
app.run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))
ここでただ単にapp.run()としないところが味噌。
この時点でローカルでちゃんと動くか確認。
$ (flaskapp) $ python app.py
* Serving Flask app "app" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
$ curl http://127.0.0.1:5000
Hello World!
###herokuへデプロイ
$ (flaskapp) $ git init
$ (flaskapp) $ echo "*.DS_Store" > .gitignore
$ (flaskapp) $ git add .
$ (flaskapp) $ git commit -m 'first commit'
$ (flaskapp) $ heroku create
$ (flaskapp) $ git push heroku master
###動作確認
#####Herokuコンソールの画面右上のOpen appボタンをクリック
###追記
#####Herokuにフォルダを追加したい場合
Flaskでよく使うstaticフォルダ
などをアプリに追加してHerokuにデプロイしてもheroku上に作られない。理由はgitはカラフォルダを無視してしまうから。
なんでもいいからstaticフォルダにファイルを入れておいてからデプロイするとstaticフォルダが作られる。
参考:【完全版】Flaskで作ったAPIをHerokuにデプロイする手順(備忘録)
参考:Error: No such file or directory: '/app/{myappname}/static'”