Line Botを公開してから1年、ここ半年ほど自分でも利用していなかったのですが、気付いたら動かなくなっていました。
PCのローカルにもコードを残していない状態だったので、Herokuアカウントのログインパスワードを思い出すところから対応しました、、
まず、前回操作時から何か更新があったのかを確認します。
1 2 3 4 |
C:\Users\hayabusa\Documents\linebot>heroku releases --app splitit-splitit v118 Update DATABASE by heroku-postgresql heroku-postgresql@addons.heroku.com 2022/06/12 09:07:16 +0900 v117 Deploy d0219a9f 自分のアドレス 2021/08/09 14:44:53 +0900 |
22年6月に何か更新が入ったようですね
次に、コードを手元に用意します。任意のディレクトリで以下を実行。
1 |
C:\Users\hayabusa\Documents\linebot>heroku git:clone -a splitit-splitit |
ローカルでコードを更新して、アップしてみます。Git pushですが、TortoiseGitをインストールしてあるのでそのままPushできます。
ログを確認しながら実行すると、以下のようにBuild succeededと出るはずです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
C:\Users\hayabusa\Documents\linebot>heroku logs --tail --app アプリ名 2022-08-24T12:50:46.829134+00:00 app[web.1]: 10.1.52.104 - - [24/Aug/2022 12:50:46] "POST /callback HTTP/1.1" 200 - 2022-08-24T12:51:02.445159+00:00 app[web.1]: 10.1.46.2 - - [24/Aug/2022 12:51:02] "POST /callback HTTP/1.1" 200 - 2022-08-24T12:53:00.692263+00:00 heroku[web.1]: Restarting 2022-08-24T12:53:00.705263+00:00 heroku[web.1]: State changed from up to starting 2022-08-24T12:53:01.384142+00:00 heroku[web.1]: Stopping all processes with SIGTERM 2022-08-24T12:53:01.575848+00:00 heroku[web.1]: Process exited with status 143 2022-08-24T12:53:03.266345+00:00 heroku[web.1]: Starting process with command `python main.py` 2022-08-24T12:53:04.919367+00:00 heroku[web.1]: State changed from starting to up 22-08-24T12:53:04.756335+00:00 app[web.1]: * Serving Flask app "main" (lazy loading) 2022-08-24T12:53:04.756342+00:00 app[web.1]: * Environment: production 2022-08-24T12:53:04.756373+00:00 app[web.1]: WARNING: This is a development server. Do not use it in a production deployment. 2022-08-24T12:53:04.756375+00:00 app[web.1]: Use a production WSGI server instead. 2022-08-24T12:53:04.756394+00:00 app[web.1]: * Debug mode: off 2022-08-24T12:53:04.757085+00:00 app[web.1]: * Running on http://0.0.0.0:7579/ (Press CTRL+C to quit) 2022-08-24T12:52:31.000000+00:00 app[api]: Build started by user XXX@gmail.com 2022-08-24T12:52:53.627625+00:00 app[api]: Deploy 6f910f89 by user XXX@gmail.com 2022-08-24T12:52:53.627625+00:00 app[api]: Release v119 created by user XXX@gmail.com 2022-08-24T12:53:02.000000+00:00 app[api]: Build succeeded |
main.pyにprint()を追加しただけでpushしましたが、print()した内容がLogに反映されるようになりました。
で、今回対応しなければならないエラーはこちら。create_message.calc()の中で失敗しており、原因はDBのデータ取得部分にありそうです。最初にreleasesを確認したときに、2022年6月に自分の知らない更新があったのでPostgres関係だろうとは思いましたが、、
コード
1 2 3 4 5 6 |
print(67,bill,action,group,name) reply=create_message.calc(bill,action,group,name) print(69,reply) line_bot_api.reply_message( event.reply_token, TextSendMessage(text=reply)) |
ログ
1 2 |
2022-08-24T13:17:25.756321+00:00 app[web.1]: 67 102 add: group_id Name 2022-08-24T13:17:55.423272+00:00 heroku[router]: at=error code=H12 desc="Request timeout" method=POST path="/callback" host=splitit-splitit.herokuapp.com request_id=6ecec5d1-d980-4929-814c-89d95eb4fcd3 fwd="147.92.150.196" dyno=web.1 connect=0ms service=30001ms status=503 bytes=0 protocol=https |
DBとしてPostgresを使っているので、Postgresにログインしてテーブル設計を見直します。事前にpostgresqlのインストールと、Pathを通す作業が必要です。
1 |
C:\Users\hayabusa>heroku pg:psql --app splitit-splitit |
DBの中には問題がなさそうだったので、DBに接続する部分について調べてみると、原因分かりました。。
1 2 3 4 5 6 7 8 9 |
def get_connection(): dsn = "host=XXXX.compute-1.amazonaws.com port=5432 dbname=XXXX user=XXXX password=XXXX" return psycopg2.connect(dsn) def calc(bill, action, group, name): with get_connection() as conn: conn.autocommit = True with conn.cursor() as cur: 処理の内容 |
dsnの中身が、Herokuから確認した内容と違います。these credentials are not permanentと記載がありました。資格情報はセキュリティのために時々更新されるようです。
資格情報が更新された時に新しい資格情報でアプリを実行する方法もあるような気がするのですが、、、分からないので放置します。また1年後くらいに資格情報の更新があったらLine Botが止まりますね、、