サーバーに laravel Horizon をセットアップしましたが、ジョブの半分が次のエラーで失敗していることがわかりました。
Illuminate\Database\Eloquent\ModelNotFoundException: No query results for model [App\User]. in /var/www/html/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:470
Stack trace:
#0 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/SerializesAndRestoresModelIdentifiers.php(102): Illuminate\Database\Eloquent\Builder->firstOrFail()
#1 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/SerializesAndRestoresModelIdentifiers.php(57): App\Jobs\SendGroupInvitationJob->restoreModel(Object(Illuminate\Contracts\Database\ModelIdentifier))
#2 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/SerializesModels.php(45): App\Jobs\SendGroupInvitationJob->getRestoredPropertyValue(Object(Illuminate\Contracts\Database\ModelIdentifier))
#3 [internal function]: App\Jobs\SendGroupInvitationJob->__wakeup()
#4 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(53): unserialize('O:31:"App\\Jobs\\...')
#5 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(88): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\RedisJob), Array)
#6 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(368): Illuminate\Queue\Jobs\Job->fire()
#7 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(314): Illuminate\Queue\Worker->process('redis', Object(Illuminate\Queue\Jobs\RedisJob), Object(Illuminate\Queue\WorkerOptions))
#8 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(134): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\RedisJob), 'redis', Object(Illuminate\Queue\WorkerOptions))
#9 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(112): Illuminate\Queue\Worker->daemon('redis', 'default', Object(Illuminate\Queue\WorkerOptions))
#10 /var/www/html/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(96): Illuminate\Queue\Console\WorkCommand->runWorker('redis', 'default')
#11 /var/www/html/vendor/laravel/horizon/src/Console/WorkCommand.php(46): Illuminate\Queue\Console\WorkCommand->handle()
#12 [internal function]: Laravel\Horizon\Console\WorkCommand->handle()
#13 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(32): call_user_func_array(Array, Array)
#14 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Util.php(36): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#15 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate\Container\Util::unwrapIfClosure(Object(Closure))
#16 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#17 /var/www/html/vendor/laravel/framework/src/Illuminate/Container/Container.php(590): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#18 /var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php(134): Illuminate\Container\Container->call(Array)
#19 /var/www/html/vendor/symfony/console/Command/Command.php(255): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#20 /var/www/html/vendor/laravel/framework/src/Illuminate/Console/Command.php(121): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#21 /var/www/html/vendor/symfony/console/Application.php(1001): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 /var/www/html/vendor/symfony/console/Application.php(271): Symfony\Component\Console\Application->doRunCommand(Object(Laravel\Horizon\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#23 /var/www/html/vendor/symfony/console/Application.php(147): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#24 /var/www/html/vendor/laravel/framework/src/Illuminate/Console/Application.php(93): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#25 /var/www/html/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(131): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#26 /var/www/html/artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#27 {main}
なぜこれが起こっているのかわかりませんが、私のローカル環境ではキューが正常に機能しています。誰もがこれらの問題に遭遇しましたか
コードは次のとおりです。
コールディスパッチメソッド
dispatch(new NewAcceptedContactRequestJob(auth()->user(), $user));
ジョブクラスを呼び出す
namespace App\Jobs;
use App\Notifications\NewAcceptedContactRequestNotification;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class NewAcceptedContactRequestJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $sender;
protected $receiver;
/**
* Create a new job instance.
*
* @param $sender
* @param $receiver
*/
public function __construct($sender, $receiver)
{
$this->sender = $sender;
$this->receiver = $receiver;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$this->receiver->notify(new NewAcceptedContactRequestNotification($this->sender, $this->receiver));
}
}
通知クラスを呼び出す
namespace App\Notifications;
use App\Profile;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class NewAcceptedContactRequestNotification extends Notification implements ShouldQueue
{
use Queueable;
protected $sender;
protected $receiver;
/**
* Create a new notification instance.
*
* @param $sender
* @param $receiver
*/
public function __construct($sender, $receiver)
{
$this->sender = $sender;
$this->receiver = $receiver;
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
if (Profile::sendEmailNotification('NewAcceptedContactRequestNotification', $this->receiver->id)) {
return ['database', 'mail'];
} else {
return ['database'];
}
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Contact request accepted')
->from(env('MAIL_FROM_ADDRESS'), env('APP_NAME'))
->greeting('Hello '.$this->receiver->first_name)
->line($this->sender->first_name . ' ' . $this->sender->last_name . ' has accepted your contact request')
->action('Click to view their profile', env('APP_URL').'/member/profiles/'.$this->sender->username);
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
'heading' => 'Contact request accepted',
'message' => $this->sender->first_name . ' ' . $this->sender->last_name . ' has accepted your contact request',
];
}
}