1

Laravel アプリケーションのテーブルに新しい行が追加されたときにメールをトリガーしたいと考えています。ただし、並べ替えのバッファを追加したいので、5 行が立て続けに追加されると、1 つの電子メールのみが送信されます。

私が選択した方法は、15 分ごとにチェックをスケジュールし、新しい行が追加されているかどうかを確認することです。ある場合は、メールをキューに入れます。

現在、スケジュールでエラーが発生しています。以下のコードを実行します。

スケジュールをセットアップするKernel.phpには、次のようなものがあります。

        $schedule->job(new ProcessActivity)
        ->everyFifteenMinutes()
        ->when(function () {
            return \App\JobItem::whereBetween('created_at', array(Carbon::now()->subMinutes(15), Carbon::now()))->exists();
        })
        ->onSuccess(function () {
            Log::debug(
                'Success'
            );
        })
        ->onFailure(function () {
            Log::debug(
                'Fail'
            );
        });

App\Jobs\ProcessActivity.phpにあるジョブをトリガーするために使用します。

 public function __construct()
{

    $this->jobs = \App\JobItem::whereBetween('created_at', array(Carbon::now()->subMinutes(15), Carbon::now()))->get();
}

/**
 * Execute the job.
 *
 * @return void
 */
public function handle()
{


    Log::debug('Activity Job Run',  ['jobs' => $this->jobs]);

    $this->jobs->each(function ($item, $key) {
        Log::debug('loop');

        // get project
        $project = $item->project;

        // get project email
        $user_id = $project->user_id;
        $email = \App\User::find($user_id)->email;

        // get project UUID
        $projectUuid = $project->public_id;

        // emails
        $subscriberEmails = \App\ProjectSubscription::where('project_id', $project->id)->get();

        // create activity email
        Notification::route('mail', $subscriberEmails)->notify(new Activity($project, $projectUuid));
    });

    return true;
}

JobItems と Project モデルの間の関係も示す完全なコードを上記に投稿しました。コードでコメントしたので、詳しくは説明しません。

問題

JobItem テーブルに新しい行を追加すると、ジョブがスケジュールされて処理されていることがわかります (Laravel Telescope を使用してこれを調べます)。

ただし、ログを見ると、ジョブごとに次の 2 つのログ メッセージが表示されることもわかります。

最初: ' Fail '、次に ' Activity Job Run '

メールが送信されず、これが失敗した理由を特定する方法がわかりません。

そのため、onFailure がトリガーされているようで、私の ProcessActivity に問題があります。

どこが間違っているのか、エラーを特定する方法についての手がかりをいただければ幸いです。

4

1 に答える 1