LoginSignup
4
10

More than 3 years have passed since last update.

Flaskアプリをherokuにデプロイ(苦苦々)

Last updated at Posted at 2020-01-19

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ボタンをクリック

image.png

別画面が開いて無事にHello Worldと表示された。
image.png


追記

Herokuにフォルダを追加したい場合

Flaskでよく使うstaticフォルダなどをアプリに追加してHerokuにデプロイしてもheroku上に作られない。理由はgitはカラフォルダを無視してしまうから。
なんでもいいからstaticフォルダにファイルを入れておいてからデプロイするとstaticフォルダが作られる。


参考:【完全版】Flaskで作ったAPIをHerokuにデプロイする手順(備忘録)
参考:Error: No such file or directory: '/app/{myappname}/static'”

4
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
10