laravel

Laravel Horizon を試した

More than 1 year has passed since last update.

Redisキューのためのダッシュボード。

https://github.com/laravel/horizon
https://horizon.laravel.com/

必要な環境

  • Laravel 5.5 以上
  • PHP 7.1 以上
  • Redis キュー
  • Supervisor

自分で環境整えるとすると結構面倒…。普段キューは SQS だし。今回 Forge で環境作ったので Redis に変えて Horizon 使ってみた。

以下も Forge が前提。

インストール

まぁドキュメント通りに。
https://readouble.com/laravel/5.5/ja/horizon.html

設定

config/horizon.php で変えるのはとりあえず1,2ヶ所

    'queue' => ['default'],

config/queue.phpqueue と同じにする。

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => 'default',
            'retry_after' => 90,
        ],

配列なので同じ Redis で複数のキューを使ってる場合は ['queue1', 'queue2'] で一つの Horizon でまとめて見られるはず。

Horizon::auth

そもそもこれどこに書くんだ?となった。最初は routes かと思ったけど違った。
答えは AppServiceProvider。ServiceProvider ならどこでもいいけど。

    public function boot()
    {
        \Horizon::auth(function ($request) {
            return $request->user()->id === 1;
        });
    }

auth()->user() でも request()->user() でもいいはず。

Horizon を表示しようとしてるユーザーを見て true を返せば表示される。false なら Whoops, looks like something went wrong.

IP で制限なら

$request->ip() === '192.168.0.0';

実行

ローカルではとりあえずの php artisan horizon (Vagrant内で実行)でいいけどサーバーで動かす場合はデーモンとして動かす必要がある。
Forge ならこれでいいから簡単。
https://medium.com/@taylorotwell/deploying-horizon-to-laravel-forge-fc9e01b74d84

サーバー設定側の Deamons で php artisan horizon を追加して
サイト設定側の Deploy Script に php artisan horizon:terminate 追加。

タグ

自動で付けられて Monitoring で…ということになってるけど使い方はまだ分からない。しばらく試して自動タグの場合は App\Model\User:1: の後ろまで正確に設定すればよかった。

手動でタグ設定するためには tags() メソッドを追加。元々 Job クラスに tags() メソッドがあったせいでエラーになるというものすごい低確率の罠踏んだ。

できること

無事に動かせたとしてなにができるかというと…? 今の所は綺麗なダッシュボードを見てるだけ。失敗ジョブのリトライはできそうだけどまだ失敗がない。

各機能の画面はここにある。
https://medium.com/@taylorotwell/introducing-laravel-horizon-4585f66e3e

(追記)キューの管理もできる

かなり後になって気付いたけど Horizon だけでキューの管理もできる。
Forge の場合、サイト設定の Queue で Worker を動かして Deploy Script で php artisan queue:restart してる部分が Horizon 使うなら不要になる。
queue:restart の代わりが horizon:terminate