【问题标题】:Laravel Mailer queue with Redis showing error "The script tried to execute a method or access a property of an incomplete object."带有 Redis 的 Laravel Mailer 队列显示错误“脚本试图执行方法或访问不完整对象的属性。”
【发布时间】:2019-11-19 15:08:23
【问题描述】:

这是完整的错误。

Illuminate\Mail\SendQueuedMailable::handle():脚本试图 执行方法或访问不完整对象的属性。请 确保类定义“Security\Mail\WelcomeMail”的 您尝试操作的对象是在 unserialize() 之前加载的 被调用或提供一个自动加载器来加载类定义 /var/www/html/vendor/laravel/framework/src/Illuminate/Mail/SendQueuedMailable.php

我们使用的是 Laravel 5.5。并执行以下代码

Mail::to($customer)->queue(new WelcomeMail($customer));

邮件程序是 laravel 附带的默认邮件程序,但我们正在将作业排队到 redis。客户是一个用户对象。欢迎邮件如下

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

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

    public $user;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($user)
    {
        $this->user = $user;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->view('security::emails.welcome');
    }
}

【问题讨论】:

  • WelcomeMail 在放入队列时被序列化,然后在处理队列时被反序列化。在序列化和反序列化之间是否有任何更改为WelcomeMail?您是否重命名了班级?你搬了班吗?您是否更改了名称空间?这些东西可能会破坏反序列化

标签: php laravel


【解决方案1】:

我发现了我的问题。不止一台服务器(localhost、staging 等)在同一个 Redis 实例上有一个队列监听器。

【讨论】:

    猜你喜欢
    • 2010-11-16
    • 2014-01-06
    • 2012-02-02
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 2015-10-08
    相关资源
    最近更新 更多