Herokuの無料枠だと、30分アクセスがないとスリープしてしまう問題をなんとかしたい...!!
(Herokuの無料枠では)Web アプリに 30 分間アクセスがないとスリープします。
次にアクセスがあったときに Dyno を起動する必要があるので数秒程度、レスポンスに時間が掛かります。
なぜやるのか
現在LINEボットを開発中で、無料で済ませたいためHerokuにデプロイしたのですが、Herokuの無料枠では30分何もアクセスがないとサーバーがスリープモードに入ってしまいます。一度スリープモードに入ってしまうと、再度起動までに予想外に時間がかかってしまい、ボットで返ってくるはずの返事が返ってこなかったり、LIFFブラウザを立ち上げてからページを開くまでに30秒ほどかかってしまったりと、このスリープが予想外に弊害になっていました。
ですが、ようは30分内になんらかのリクエストがアプリ側に送られればHerokuはスリープモードに入らないわけです。
ということで、Herokuのアドオン、「Scheduler」を使用して、10分に一回、Heroku側になんらかのリクエストを送る処理を実装することにしました。
やり方
参考: https://haayaaa.hatenablog.com/entry/2019/03/01/222221
①Schedulerアドオンの追加
まず、ターミナルから heroku addons:add scheduler:standard
をしてアドオンを追加します
heroku addons:add scheduler:standard
※アドオンとは、プラグイン、拡張機能のようなものです。
②Herokuのブラウザアプリにアクセスし、shedulerをクリック
③ Add jobをクリックし、10分毎にHerokuのデプロイ先URLにcurlコマンドでリクエストコマンドを送る処理を追加
(④ % heroku logs -t
でログを確認)
ターミナルで% heroku logs -t
を叩き、10分毎に以下のようなログが残っていたら成功です
2021-05-05T13:22:03.309820+00:00 app[api]: Starting process with command `curl https://hoge.herokuapp.com/` by user scheduler@addons.heroku.com
2021-05-05T13:22:19.636248+00:00 heroku[scheduler.5024]: Starting process with command `curl https://hoge.herokuapp.com/`
簡単〜