Laravel排队的电子邮件在发送一些后引发异常

时间:2018-09-26 14:45:39

标签: laravel queue laravel-5.4

我有一个Laravel 5.4应用程序。

我的问题是我有一个每周工作,排队一些电子邮件。

赞:

Mail::to($user)->queue(new \App\Mail\INBND10\i01($user));

一切都很好,有些电子邮件已经发送了,但是在发送了几封电子邮件之后,我得到了试图获取非对象属性的消息。

Sentry告诉我,这在Mail构建方法中,如此处所示:

Sentry log

有什么想法导致这种奇怪的行为吗?

编辑

StackTrace

ErrorException: Trying to get property of non-object
#40 vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(462): handleError
#39 vendor/sentry/sentry/lib/Raven/Breadcrumbs/ErrorHandler.php(34): handleError
#38 vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(462): setAddress
#37 vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(346): from
#36 app/Mail/INBND10/i01.php(35): build
#35 app/Mail/INBND10/i01.php(0): call_user_func_array
#34 vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): Illuminate\Container\{closure}
#33 vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): callBoundMethod
#32 vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): call
#31 vendor/laravel/framework/src/Illuminate/Container/Container.php(539): call
#30 vendor/laravel/framework/src/Illuminate/Mail/Mailable.php(116): send
#29 vendor/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php(52): handle
#28 vendor/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php(0): call_user_func_array
#27 vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): Illuminate\Container\{closure}
#26 vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): callBoundMethod
#25 vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): call
#24 vendor/laravel/framework/src/Illuminate/Container/Container.php(539): call
#23 vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(94): Illuminate\Bus\{closure}
#22 vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(114): Illuminate\Pipeline\{closure}
#21 vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): then
#20 vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(98): dispatchNow
#19 vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(42): call
#18 vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(69): fire
#17 vendor/laravel/framework/src/Illuminate/Queue/Worker.php(317): process
#16 vendor/laravel/framework/src/Illuminate/Queue/Worker.php(267): runJob
#15 vendor/laravel/framework/src/Illuminate/Queue/Worker.php(113): daemon
#14 vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(101): runWorker
#13 vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(85): fire
#12 vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(0): call_user_func_array
#11 vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(29): Illuminate\Container\{closure}
#10 vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(87): callBoundMethod
#9 vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(31): call
#8 vendor/laravel/framework/src/Illuminate/Container/Container.php(539): call
#7 vendor/laravel/framework/src/Illuminate/Console/Command.php(182): execute
#6 vendor/symfony/console/Command/Command.php(251): run
#5 vendor/laravel/framework/src/Illuminate/Console/Command.php(167): run
#4 vendor/symfony/console/Application.php(946): doRunCommand
#3 vendor/symfony/console/Application.php(248): doRun
#2 vendor/symfony/console/Application.php(148): run
#1 vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(122): handle
#0 artisan(35): null

1 个答案:

答案 0 :(得分:0)

万一有人偶然发现。

我们使用Laravel Forge来部署我们的应用程序,尽管我在每次部署中都运行php artisan queue:restart命令,但其中一些工作程序从未重启过,其中一些工作了12天以上。

因此,当分配这些工人中的一个来执行作业时,他们崩溃了,因为他们没有更新的代码。

这就是为什么某些电子邮件在崩溃之前发送的原因。

如何修复

要解决此问题,当我在Forge上创建队列工作器时,必须设置一个超时值。因此,这样一来,所有工作人员都不会冻结,并且可以按预期重新启动工作。

https://laravel.com/docs/5.7/queues#job-expirations-and-timeouts