いちばんやさしいpythonの教本のpybotをデプロイする方法


いちばんやさしいpythonの教本

サンプルコードはこちら
https://book.impress.co.jp/books/1116101151

こちらの本ではローカル環境でプログラムを動かすところまでは出来るのだが、webサーバーへの設置の仕方は一切掲載されていないので、ここから先は独力でやらなくてはならなかった。
フレームワークがbottleなのでこちらのサイトを参考にデプロイ(webサーバーへの設置)を行った。
https://qiita.com/ohbarye/items/55ec574f10685a012baf

しかしデプロイはできるもののエラー画面が出るのみでデプロイが成功しないため、teratailに質問を設置した。
https://teratail.com/questions/148745

・・・が解決せず。
いだいただいた回答の中に、

「ログを見ると、Buildは済んでおり、python pybot.pyをした後にクラッシュしています。
さらにステータスコードが503なので、作成したアプリの中でエラーが起こっている可能性が高いです。
写し間違いということもありますので、もう一度コードを見直してみてください。」

というものがあったためコードの間違いがないようにサンプルコードでデプロイを行うことにした。
・・・がそれでも同様のエラーが発生してしまった。

半ばあきらめかけていた時に下記サイトを発見し、デプロイまでの手引きをいただくことになった。
https://yukituna.com/1146/

結論からするとデプロイは成功し、無事webアプリの立ち上げに成功した。
https://sheltered-badlands-15046.herokuapp.com/hello

以下私の環境で行ったデプロイ方法を記載する。

まず以下の3つをダウンロードすること。

git
https://gitforwindows.org/
Python 3.7.0(最新のものをダウンロード)
https://www.python.org/
heroku toolbelt
https://devcenter.heroku.com/articles/heroku-cli

herokuでデプロイをするためユーザー登録をしておくこと。
https://jp.heroku.com/

サンプルコードをダウンロード後\500208_yasashiipython\Chapter9\lesson60と移動していき、lesson60フォルダを取り出す。
https://book.impress.co.jp/books/1116101151

さらに環境構築を進める。
コマンドプロンプトを立ち上げ

C:¥Users¥ユーザー名>cd Desktop¥lesson60

と打ち込んで対象のフォルダに移動する。

pipが最新のものにアップグレードされていなかったのでアップグレードした

python -m pip install --upgrade pip

いちばんやさしいpythonの教本p208にあるように以下を叩く

pip install requests

さらに

pip install bottle
pip install wikipedia

を叩く。
いちばんやさしいpythonの教本p241のように

python pybotweb.py

と叩くとローカル環境でプログラムが動作することが確認できるはず。

ctrl+Cを叩きローカルホストから抜け出す。
ここからいよいよデプロイを進める。書いていただいた記事を参考にデプロイを進める
https://yukituna.com/1299/

cd lesson60 //仮想環境を立ち上げるディレクトリに移動
pipenv install  //pipenvをインストール

pipenv installと叩くと
'pipenv' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
エラーが出たのでいちばんやさしいpythonの教本p214~p215を参考に仮想環境を構築する。

python -m venv env
env¥Scripts¥activate.bat

requirements.txtとProcfileを作成。Procfileはpybotweb.pyに指定する。

pip freeze > requirements.txt
echo web: python pybotweb.py > Procfile

ここからが重要。サンプルコードの書き換えをする必要があった。
こちらを参考にする。
https://yukituna.com/1299/

  import os  //一行目に追加
  #run(host='localhost', port=8080, debug=True)  //これをコメントアウトさせる
  run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))  //最終行に追加

さらにその下のデプロイ方法を参考にデプロイ・・・

 heroku login
 heroku create lesson60test
 git init
 heroku git:clone -a lesson60test
 git add -A .
 git commit -m "myapp"
 git push heroku master

が git push heroku masterを押したところエラーが発生。
私の環境ではコミットができなかったようなのでこちらを参考にやり直した。
https://qiita.com/ohbarye/items/55ec574f10685a012baf

git add .
git commit -m "initial commit"

成功したので公開する。

heroku apps:create
git push heroku master

最後に

heroku open

下のような画面になれば成功

URLの後ろに/helloを追加するとwebアプリが立ち上がっていることが確認できた。

繰り返すがいちばんやさしいpythonの教本にはデプロイに関する記載はないため、コードを書き換える必要があること気が付けなかった。

  import os  //一行目に追加
  #run(host='localhost', port=8080, debug=True)  //これをコメントアウトさせる
  run(host="0.0.0.0", port=int(os.environ.get("PORT", 5000)))  //最終行に追加

ここに関してなぜ書き換える必要があるかわかっていないので勉強する必要がある。

また当初

echo web: python pybot.py > Procfile

と記載しProcifileをpybotweb.pyで作成していなかった。これに関してもProcifileをどのファイルを対象に作成すればよいのか理解していないので勉強する必要がある。

が、なにしろついにwebにアプリケーションを公開するという体験を得ることができた。
大きな一歩だと思いたい。

参考サイト
https://qiita.com/ohbarye/items/55ec574f10685a012baf
https://yukituna.com/1299/

私の初歩的な質問に粘り強く回答してくださったKashiwaba Yuki様に多大な感謝を!
本当にありがとうございます。