herokuでTwitter分析アプリを作成する
こんばんは。今日は昨日に引き続きこちらのチュートリアルを進めていきます。
昨日は慣れないWindows環境で取り組んだ結果、herokuにログインできず、挫折したので。今日は自分のMacでherokuにアップするところまで進めていきました。
そして結論から言うと、失敗しました! 正確にはローカルでは起動するんですが、なぜかherokuにアップすると機能しない、という残念な感じになりました。
とはいえ、それまでにもかなり躓いたので、今日はエラーログ対応記事です。
まずは成果物
最終的には、こんな感じのものがローカルで動くようになりました。
結局Dockerで実装したので、以前の記事でも書いたようにlocalhostでの実行ではなく、IPアドレスとポートを指定しての実行に変えています。
herokuにあげてみた
noteの記事にある通りにまずはherokuにあげてみました。すると・・・
出た!エラー! もうこういうのは慣れたもんで、エラーが出ないまますいすいと進んでいくとむしろ不安になることがあります。
とりあえず指示通り、heroku logs --tailを見てみます。
2018-08-09T13:50:56.266716+00:00 heroku[web.1]: Starting process with command `「` 2018-08-09T13:50:58.009098+00:00 heroku[web.1]: Process exited with status 127 2018-08-09T13:50:57.955893+00:00 app[web.1]: bash: gunicorn: command not found 2018-08-09T13:50:58.322466+00:00 heroku[web.1]: State changed from starting to crashed 2018-08-09T13:51:25.661136+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=dai-tutorial.herokuapp.com request_id=9ab38a0d-12fd-4d19-8409-4b49285d7e4b fwd="210.165.149.139" dyno= connect= service= status=503 bytes= protocol=https 2018-08-09T13:51:26.396912+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=dai-tutorial.herokuapp.com request_id=5dbcfac3-0a19-4b72-a656-a67234853933 fwd="210.165.149.139" dyno= connect= service= status=503 bytes= protocol=https
まずログの後半に、こんな部分が。どうもfavicon.icoが見つからないのかなんなのか。503エラーなのでサーバサイドからのエラーが出ていそうです。
at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=dai-tutorial.herokuapp.com request_id=5dbcfac3-0a19-4b72-a656-a67234853933 fwd="210.165.149.139" dyno= connect= service= status=503 bytes= protocol=https
その前のログでも似たようなエラー。
at=error code=H10 desc="App crashed" method=GET path="/" host=dai-tutorial.herokuapp.com request_id=9ab38a0d-12fd-4d19-8409-4b49285d7e4b fwd="210.165.149.139" dyno= connect= service= status=503 bytes= protocol=https
この2つで悶々と悩んだんですが、解決方法がわからず。とここで、改めて上から読んでみると「not found」の記述。
bash: gunicorn: command not found
今回起動時に、「gunicorn app:app --log-file=-」を指定しているのですが、そのgunicornがないと言われているようです。 これは結構クリティカルなエラーぽいので、requirements.txtを確認したところ、やっぱり入ってない。
herokuはデプロイするときに、requirements.txtから必要モジュールをダウンロードするので、それが抜けていたのが原因だった模様。 そこで、pipでインストールしてから、requreiments.txtに書き込みます。
pip install gunicorn pip freeze -> requirements.txt
このあと改めてherokuにデプロイしたところ、無事トップ画面が起動しました。 ただなぜかその後の検索は機能しません。一応エラーコードは下記です。
2018-08-09T14:12:36.951288+00:00 app[web.1]: return f(*args, **kwds) 2018-08-09T14:12:57.111263+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/" host=dai-tutorial.herokuapp.com request_id=89e81ba1-c4d6-4698-8541-c270f760965e fwd="210.165.149.139" dyno=web.1 connect=5ms service=30000ms status=503 bytes=0 protocol=https 2018-08-09T14:12:57.625943+00:00 app[web.1]: [2018-08-09 14:12:57 +0000] [4] [CRITICAL] WORKER TIMEOUT (pid:44) 2018-08-09T14:12:57.648460+00:00 app[web.1]: [2018-08-09 14:12:57 +0000] [44] [INFO] Worker exiting (pid: 44) 2018-08-09T14:12:57.840090+00:00 app[web.1]: [2018-08-09 14:12:57 +0000] [62] [INFO] Booting worker with pid: 62 2018-08-09T14:12:58.217709+00:00 app[web.1]: /app/.heroku/python/lib/python3.6/importlib/_bootstrap.py:219: RuntimeWarning: numpy.dtype size changed, may indicate binary incompatibility. Expected 96, got 88
こちらはまだ解決していませんが、タイムアウトなのが余計なぞですね。 APIの制限かなーと思ったりもしましたが、ローカルだと機能するのでそれはなさそう・・・。 もうひと踏ん張りがんばります。
それでは本日はここまで。最後までお付き合いいただきありがとうございました。