結論
bottleを使ったアプリケーションをHerokuで公開する。
はじめに
PythonのbottleでWebアプリケーションを作りHerokuなるものを使ってデプロイしようとしたものの、なかなか上手くいかなかったためアウトプットとして記事を書いてみます。初めての投稿かつ初心者なため色々指摘していただければありがたいです。
環境
- Windows10
- Python 3.8.3
- bottle 0.12.18
- numpy 1.18.5
- scikit-learn 0.23.1
参考にしたサイト
基本的にこれらのサイトの手順で問題ないと思いますが、僕は何かとバグってしまったのでその際に参考にしていただければと思います。
手順
- Herokuのアカウントを作る
- Heroku CLIをインストールする
- Webアプリを作る
- デプロイしたいファイルを格納するディレクトリを作る(以下のファイルが必要)
- main.py
- requirement.txt
- Procfile
- runtime.txt
- その他のファイル(bottleのテンプレートファイルとか)
- gitコマンドでコミットする
- Herokuにデプロイする
Herokuのアカウント作成
ここからアカウントを作成できます。
Heroku CLIのインストール
ここからHeroku CLIをインストールします。
僕はWindowsだったので、インストーラーをDLした後heroku-x64.exe
を実行しました。選ぶところは全てデフォルトのままでやりました。
Webアプリの作成
作ってください。リモート環境で動くかに注意してください。
リモート環境で動かすときは、以下のコードにしていましたが、
run(host="localhost",port=8080,debug=True)
デプロイする際は以下のコードに変えました。このあたり何をしているのかよく分かっておらず、とりあえず写経したというところです。
run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))
デプロイしたいファイルを格納するディレクトリを作る
main.pyとその他のファイルについては特に言うことはありません。
注意ポイント
requirement.txt, Procfile, runtime.txtの文字コードに注意しましょう。
utf-16 LEなる文字コードではデプロイできず、utf-8ならばデプロイできました。
requirement.txt
これは、インポートしたいモジュールとそのバージョンを記述するファイルです。numpyなどを利用する際にはパッケージがあるようなのですが、僕はエラーを修正できなかったため止めました。
以下のような内容になりました。
モジュール名==バージョン
という記法です。
bottle==0.12.18
numpy==1.18.5
scikit-learn==0.23.1
Procfile
これは、実行するpythonのファイルを記述するファイルだと思います(理解が浅い)。また、Procfile.windowsというファイルも作成し、以下のように記述しました。
以下のmain.py
の部分は自分のPythonファイルの名前に変更してください。bottleではなく、flaskを利用している場合以下の書き方ではないようです。
web: python main.py
web: python main.py runserver 0.0.0.0:5000
runtime.txt
これは実行するPythonのバージョンです。Herokuのサポートするバージョンが決まっているらしく、とりあえずPython-3.8.5
にしました。自分の実行環境と違いましたが、イケました(おそらく良くない)。
大文字と小文字を間違えるとエラーになるようなので、注意しましょう。
python-3.8.5
注意(もう一度)
requirement.txt, Procfile, runtime.txtの文字コードに注意しましょう。
utf-16 LEなる文字コードではデプロイできず、utf-8ならばデプロイできました。
gitコマンドでコミットする
デプロイしたいディレクトリに移動し、そのディレクトリをコミットします。
cd (デプロイしたいディレクトリ)
git init
git add --all
git commit -m "first commit"
Herokuにデプロイする
いよいよHerokuにデプロイします。
僕はアプリ作成よりもこちらで時間を喰ってしまいました
Herokuへのログイン
まずHerokuにログインします。Herokuに登録したメールアドレスとパスワードを聞かれるので入力します。
heroku login
上手くいくと、以下のように表示されます。
Logged in as 自分のメアド
アプリ作成からデプロイ
次に以下のように実行します。これは、アプリをHerokuで作成しています。heroku create
をすると、アドレスを教えてくれますが、そのアドレスがWebアプリのアドレスになります。この場合、名前は適当に設定されますが自分でも設定できるようです。
heroku create
最後に、プッシュします。
git push heroku master
上手くいくと、以下のようなコードが表示されるはずです。
remote: Verifying deploy... done.
逆に、上手く行かないと、以下のようなコードが表示されてしまいます。
error: failed to push some refs to 'https://git.heroku.com/XXXXXXX.git'
このとき、エラーコードの上をよく見るとどこで詰まったのかを教えてくれますがそこまで親切ではありません。そこで、https://git.heroku.com/XXXXXXX.git
のページに行くと、詳しいログを確認できるためそこで詳しい情報を知りましょう。
アプリの確認
デプロイすることができれば、
heroku open
でそのアプリを確認できます。