Heroku SchedulerでLaravelのartisanコマンドを実行する

LaravelのartisanコマンドをHeroku Schedulerを使って、定期実行する手順に確認したのでまとめてみました。

Laravelのバージョンは、2019年9月時点での最新6.0で確認しています。

Heroku Schedulerのとは

Heroku Schedulerは、cronジョブ的な仕組みを提供するHeroku公式アドオンです。

ドキュメントによると実行間隔は10分、1時間、1日のみです。
この要件で問題なければ非常に便利な機能です。

実行時刻は正確ではないので、ジョブを正確な時刻に実行する必要がある場合はここで説明するSchedulerではなくCustom Clock Processを利用する必要があります。

また、Heroku Schedulerジョブで実行するタスクの実行時間について「Long-running jobs」には、実行時間が数分を超えるような長いタスクを実行する場合は、バックグラウンドキューに入れてワーカーDynoでタスクを実行するべきと書いてあります。
更に、スケジューラーで起動されたDynoは、次のスケジュール実行時間になると停止するとも書いてあります。
よって、基本的にはLaravelの場合QueuesをワーカーDynoで起動しておいて、スケジュールジョブではジョブをディスパッチするのみにするのが正しい実装になります。

しかし、この記事では、まずはHeroku Schedulerの動作の雰囲気を掴むため、Heroku Schedulerのジョブからシンプルなartisan commandを直接実行して動作を確認してみます。
“Heroku SchedulerでLaravelのartisanコマンドを実行する” の続きを読む

HerokuでLaravel 6のログをPapertrailに出力する

HerokuにデプロイしたLaravelアプリケーションのログメッセージをHerokuのログシステムに出力して、Papertrailに連携する手順と説明をまとめました。

Laravelのバージョンは、2019年9月時点での最新6.0で確認しています。

LaravelのログをHerokuのログに統合する

PHP Application Logging | Heroku Dev Center」によると、Herokuのログ管理システム(Logplexという)はstdoutおよびstderrに出力されるメッセージをログストリームとして集めます。

heroku logsコマンドで確認できるログメッセージは各Dynoからここに集められたログを見ているわけです。

そこで、Laravelの場合もstrerrにログが出力されるように設定します。
Herokuのドキュメントの「Laravel」に記載されている通り、環境変数LOG_CHANNELerrorlogをセットするだけでOKです。

環境変数LOG_CHANNELerrorlogをセットするコマンドは以下のとおり

$ heroku config:set LOG_CHANNEL=errorlog

“HerokuでLaravel 6のログをPapertrailに出力する” の続きを読む