herokuでTwitter分析アプリを作成する

f:id:cyclemem:20180809235626j:plain

こんばんは。今日は昨日に引き続きこちらのチュートリアルを進めていきます。

note.mu

昨日は慣れないWindows環境で取り組んだ結果、herokuにログインできず、挫折したので。今日は自分のMacでherokuにアップするところまで進めていきました。

www.taikomegane.com

そして結論から言うと、失敗しました! 正確にはローカルでは起動するんですが、なぜかherokuにアップすると機能しない、という残念な感じになりました。

とはいえ、それまでにもかなり躓いたので、今日はエラーログ対応記事です。

まずは成果物

最終的には、こんな感じのものがローカルで動くようになりました。

f:id:cyclemem:20180809234451p:plain f:id:cyclemem:20180809234503p:plain

結局Dockerで実装したので、以前の記事でも書いたようにlocalhostでの実行ではなく、IPアドレスとポートを指定しての実行に変えています。

www.taikomegane.com

herokuにあげてみた

noteの記事にある通りにまずはherokuにあげてみました。すると・・・

f:id:cyclemem:20180809234735p:plain

出た!エラー! もうこういうのは慣れたもんで、エラーが出ないまますいすいと進んでいくとむしろ不安になることがあります。

とりあえず指示通り、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の制限かなーと思ったりもしましたが、ローカルだと機能するのでそれはなさそう・・・。 もうひと踏ん張りがんばります。

それでは本日はここまで。最後までお付き合いいただきありがとうございました。