Skip to content

Unserialize issue when Mailable is queued #22727

Closed
@designvoid

Description

@designvoid
  • Laravel Version: 5.5.25
  • PHP Version: 7.1.13
  • Database Driver & Version: MySQL v5.7.2

Description:

I have 3 separate servers (for reference):

  1. Application server with the application, Horizon and supervisord monitoring Horizon
  2. Redis server
  3. MySQL server

I have created a mailable:

class CourseVisible extends Mailable implements ShouldQueue
{
    use Queueable, SerializesModels;

    /**
     * The course instance.
     *
     * @var Course
     */
    public $course;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct(Course $course)
    {
        $course->load(['award:id,name']);
        $this->course = $course;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->markdown('emails.course.visible');
    }
}

Which is fired thusly:

    $course->visible = ($course->visible == true ? false : true);
    $course->save();
    Mail::to($course->notifiableUsers())->send(new CourseVisible($course));

When the queue is processed I am seeing the following errors in Horizon:

Undefined property: Illuminate\Contracts\Database\ModelIdentifier::$visible

Which is referring to this in the markdown view:

@if($course->visible == 1)

# The {{ $course->award->name }} {{ $course->title }} ({{ $course->year }}) course has been published to the website.

@else

# The {{ $course->award->name }} {{ $course->title }} ({{ $course->year }}) course has been unpublished from the website.

@endif

If I remove the ShouldQueue/Queueable portions and fire the email without queuing it works perfectly but as soon as I push it to the queue it fails.

I should also mention that I have another job that is fired by a model saving event that is queued and also passes a model instance in to a constructor and this works perfectly when queued and subsequently run.

Stack Trace

ErrorException: Undefined property: Illuminate\Contracts\Database\ModelIdentifier::$visible in /var/www/html/someurl.co.uk/prospectus/storage/framework/views/8b4dc10ef84d66c2b8ec041a4686f4e0c0892a82.php:3
	Stack trace:
	#0 /var/www/html/someurl.co.uk/prospectus/storage/framework/views/8b4dc10ef84d66c2b8ec041a4686f4e0c0892a82.php(3): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'Undefined prope...', '/var/www/html/d...', 3, Array)
	#1 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(43): include('/var/www/html/d...')
	#2 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(59): Illuminate\View\Engines\PhpEngine->evaluatePath('/var/www/html/d...', Array)
	#3 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/View/View.php(137): Illuminate\View\Engines\CompilerEngine->get('/var/www/html/d...', Array)
	#4 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/View/View.php(120): Illuminate\View\View->getContents()
	#5 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/View/View.php(85): Illuminate\View\View->renderContents()
	#6 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Mail/Markdown.php(61): Illuminate\View\View->render()
	#7 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(217): Illuminate\Mail\Markdown->render('emails.course.v...', Array)
	#8 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(189): Illuminate\Mail\Mailable->buildMarkdownView()
	#9 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(119): Illuminate\Mail\Mailable->buildView()
	#10 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php(52): Illuminate\Mail\Mailable->send(Object(Illuminate\Mail\Mailer))
	#11 [internal function]: Illuminate\Mail\SendQueuedMailable->handle(Object(Illuminate\Mail\Mailer))
	#12 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
	#13 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
	#14 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
	#15 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/Container.php(549): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
	#16 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\Container\Container->call(Array)
	#17 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(114): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Illuminate\Mail\SendQueuedMailable))
	#18 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Mail\SendQueuedMailable))
	#19 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then(Object(Closure))
	#20 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(49): Illuminate\Bus\Dispatcher->dispatchNow(Object(Illuminate\Mail\SendQueuedMailable), false)
	#21 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(76): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\RedisJob), Array)
	#22 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(320): Illuminate\Queue\Jobs\Job->fire()
	#23 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(270): Illuminate\Queue\Worker->process('redis', Object(Illuminate\Queue\Jobs\RedisJob), Object(Illuminate\Queue\WorkerOptions))
	#24 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(114): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\RedisJob), 'redis', Object(Illuminate\Queue\WorkerOptions))
	#25 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(101): Illuminate\Queue\Worker->daemon('redis', 'default', Object(Illuminate\Queue\WorkerOptions))
	#26 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(85): Illuminate\Queue\Console\WorkCommand->runWorker('redis', 'default')
	#27 [internal function]: Illuminate\Queue\Console\WorkCommand->handle()
	#28 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
	#29 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
	#30 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
	#31 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/Container.php(549): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
	#32 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Illuminate\Container\Container->call(Array)
	#33 /var/www/html/someurl.co.uk/prospectus/vendor/symfony/console/Command/Command.php(252): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
	#34 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Console/Command.php(167): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
	#35 /var/www/html/someurl.co.uk/prospectus/vendor/symfony/console/Application.php(936): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
	#36 /var/www/html/someurl.co.uk/prospectus/vendor/symfony/console/Application.php(240): Symfony\Component\Console\Application->doRunCommand(Object(Laravel\Horizon\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
	#37 /var/www/html/someurl.co.uk/prospectus/vendor/symfony/console/Application.php(148): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
	#38 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Console/Application.php(88): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
	#39 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(121): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
	#40 /var/www/html/someurl.co.uk/prospectus/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
	#41 {main}
	Next ErrorException: Undefined property: Illuminate\Contracts\Database\ModelIdentifier::$visible (View: /var/www/html/someurl.co.uk/prospectus/resources/views/emails/course/visible.blade.php) in /var/www/html/someurl.co.uk/prospectus/storage/framework/views/8b4dc10ef84d66c2b8ec041a4686f4e0c0892a82.php:3
	Stack trace:
	#0 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php(45): Illuminate\View\Engines\CompilerEngine->handleViewException(Object(ErrorException), 0)
	#1 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php(59): Illuminate\View\Engines\PhpEngine->evaluatePath('/var/www/html/d...', Array)
	#2 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/View/View.php(137): Illuminate\View\Engines\CompilerEngine->get('/var/www/html/d...', Array)
	#3 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/View/View.php(120): Illuminate\View\View->getContents()
	#4 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/View/View.php(85): Illuminate\View\View->renderContents()
	#5 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Mail/Markdown.php(61): Illuminate\View\View->render()
	#6 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(217): Illuminate\Mail\Markdown->render('emails.course.v...', Array)
	#7 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(189): Illuminate\Mail\Mailable->buildMarkdownView()
	#8 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(119): Illuminate\Mail\Mailable->buildView()
	#9 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php(52): Illuminate\Mail\Mailable->send(Object(Illuminate\Mail\Mailer))
	#10 [internal function]: Illuminate\Mail\SendQueuedMailable->handle(Object(Illuminate\Mail\Mailer))
	#11 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
	#12 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
	#13 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
	#14 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/Container.php(549): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
	#15 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\Container\Container->call(Array)
	#16 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(114): Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(Illuminate\Mail\SendQueuedMailable))
	#17 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Mail\SendQueuedMailable))
	#18 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): Illuminate\Pipeline\Pipeline->then(Object(Closure))
	#19 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(49): Illuminate\Bus\Dispatcher->dispatchNow(Object(Illuminate\Mail\SendQueuedMailable), false)
	#20 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(76): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\RedisJob), Array)
	#21 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(320): Illuminate\Queue\Jobs\Job->fire()
	#22 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(270): Illuminate\Queue\Worker->process('redis', Object(Illuminate\Queue\Jobs\RedisJob), Object(Illuminate\Queue\WorkerOptions))
	#23 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(114): Illuminate\Queue\Worker->runJob(Object(Illuminate\Queue\Jobs\RedisJob), 'redis', Object(Illuminate\Queue\WorkerOptions))
	#24 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(101): Illuminate\Queue\Worker->daemon('redis', 'default', Object(Illuminate\Queue\WorkerOptions))
	#25 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(85): Illuminate\Queue\Console\WorkCommand->runWorker('redis', 'default')
	#26 [internal function]: Illuminate\Queue\Console\WorkCommand->handle()
	#27 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): call_user_func_array(Array, Array)
	#28 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
	#29 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
	#30 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Container/Container.php(549): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
	#31 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Console/Command.php(180): Illuminate\Container\Container->call(Array)
	#32 /var/www/html/someurl.co.uk/prospectus/vendor/symfony/console/Command/Command.php(252): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
	#33 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Console/Command.php(167): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
	#34 /var/www/html/someurl.co.uk/prospectus/vendor/symfony/console/Application.php(936): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
	#35 /var/www/html/someurl.co.uk/prospectus/vendor/symfony/console/Application.php(240): Symfony\Component\Console\Application->doRunCommand(Object(Laravel\Horizon\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
	#36 /var/www/html/someurl.co.uk/prospectus/vendor/symfony/console/Application.php(148): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
	#37 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Console/Application.php(88): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
	#38 /var/www/html/someurl.co.uk/prospectus/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(121): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
	#39 /var/www/html/someurl.co.uk/prospectus/artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
	#40 {main}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions