はじめに
Dashで世界遺産を世界地図にプロットでアプリを作成してみたので、Heroku を使ってデプロイしてみる。準備はGetting Started on Heroku with Pythonを、Dash アプリのデプロイはDeploying Dash Appsを参考に進める。実行環境は以下の通り。
- Windows10 Pro
- Python 3.7.6
- Anaconda 4.9.2
コマンドライン上で行うものはすべて Anaconda Prompt で実行している。
準備
Heroku にデプロイするにあたり、以下が必要となる。
- Git
- Heroku Command Line Interface (CLI)
Git はすでにインストールしてあるため、Heroku CLI をインストール。Getting Started on Heroku with Pythonにインストーラがあるので、該当するものをダウンロードし、インストールする。インストールはデフォルトのまま行った。
Anaconda Prompt 上で $ heroku login
コマンドを実行すると、ウェブブラウザが立ち上がるのでログイン(アカウントがない場合は作成)する。ログインが完了したらこのブラウザは消しても問題ない。
Dash アプリのデプロイ
Deploying Dash Appsに従って進める。なお、仮想環境は venv ではなく Anaconda を用いている。
1. プロジェクトディレクトリの作成
$ mkdir world-heritage-cite
$ cd world-heritage-cite
2. Git によるディレクトリの初期化
test はもともと使用していた仮想環境。デプロイには gunicorn が必要となるため、インストールする。
$ git init
$ conda activate test
$ pip install gunicorn
3. app.py, .gitignore, requirements.txt, and Procfile の作成
app.py
app.py はDashで世界遺産を世界地図にプロットで作成したものを data とともにそのまま置く。名前は必ず app.py である必要があるようなので、名前を変更しておく。また import os
と server = app.server
の二文をプログラムに追記しておく。
.gitignore
参考記事とは違いがあるので、いくつか削除して作成。正直理解していないので、詳しい方いたらコメントください。
# venv # venv は使用していない
*.pyc
# .DS_Store # Mac OS 特有のもの(?)
.env # 正直よくわかっていないので残しとく
Procfile
以下内容で作成。
web: gunicorn app:server
requirements.txt
$ pip freeze > requirements.txt
で自動で生成されるとのことだったが、以降で行う 4 のプッシュ時にエラーを吐いたので、自分で書く。(Anaconda を使っているので、pip freeze がうまく機能しないのかも。)
dash
dash-core-components
dash-html-components
gunicorn
numpy
pandas
plotly
4. Heroku の初期化、Git へのプッシュ、デプロイ
以下コマンドを実行。(余談ですが Windows は ' ' だとエラーを吐くようなので、" " を使う必要があるらしい。)
$ heroku create whc-app
$ git add .
$ git commit -m "Initial commit"
$ git push heroku master
$ heroku ps:scale web=1
https://whc-app.herokuapp.comに接続するもエラー。
heroku logs --tail
でエラーログを見てみると、app.py での単純なプログラムのミス(データの読み込みをローカルにおける絶対パスにしていた)ためだった。修正後はうまく動いた。次は Heroku でのデプロイができたので、AWS におけるデプロイなども試したい。