このブログは移転しています。

MKTIAの備忘録

現在MKTIAの備忘録に記事を移行中です。

Twitter BotをHerokuで動かすときに注意すること

twitter bot をつくってローカル環境から呟くことはできたのですが、自動で呟かせようとすると強制終了して動きませんでした。

スポンサーリンク

強制終了の内容

Stopping all processes with SIGTERM

Process exited with status 143

ログを見ると、このようなメッセージが出ていました。

因みに、ログの確認は以下のコマンドでできます。Heroku の Web ページ上でも見ることができますが。

調べてみたところ、何らかの強制終了していることだけはわかりました。

Webアプリケーションフレームワークの利用

twitter bot は軽量な Web アプリケーションフレームワークの一つ Flask を利用していました。Heroku では無料枠の実行時間が限られているので、後により軽い Bottle に変更しています。

最初期のコードはこんな感じでした。

このままでも確かに実行はできるのですが、これが動くのは http://{アプリ名}.herokuapp.com/ に接続されたときです。

自分の手でアプリを開くときは問題ありませんでしたが、Heroku Scheduler で自動実行にしたところ、以下のままで止まっていることが分かりました。

ダミーアプリ

結論としてはダミーアプリを用意するとうまく動くことが分かりました。

次のようなファイル構成になっています。

  • app.py(本体)
  • hello.py(ダミーアプリ)
  • Procfile
  • requirements.txt
  • runtime.txt

Flask を読み込んで実行するアプリを適当に用意しておきます。

これはダミーアプリなので、Bot のコードは別に用意します。

Procfile

プロセスタイプなどを書いておく Procfile の内容も前回から書き換えました。

Procfile ではダミーアプリではなく、アプリ本体の方を指定しておきます。

Heroku Scheduler

Scheduler の方でも、Procfile と同様にアプリ本体を実行するように指定します。

その結果、問題なく実行できるようになりました!

実行したいプログラムをルーティングで利用するのは Web ページを構築するときくらいでしょうか。

参考記事

簡単!Herokuで動くTwitter botをPythonで実装する | Qiita

スポンサーリンク

フォローする