laravel mail queueing - недостаточно данных для десериализации

Я использую

Ubuntu
laravel 4.2
beanstalked

когда я пытаюсь

php artisan queue:work

это возвращается

 [ErrorException]                                                  
  Insufficient data for unserializing - 1403 required, 218 present  

функция почты (пакет доверия)

Mail::queueOn(
                    Config::get('confide::email_queue'),
                    Config::get('confide::email_account_confirmation'),
                    compact('user'),
                    function ($message) use ($user) {
                        $message
                            ->to($user->email, $user->username)
                            ->subject(Lang::get('confide::confide.email.account_confirmation.subject'));
                    }
                );

2 ответа

Решение

Я тоже сталкивался с этой проблемой и думаю, что у меня есть решение.

Когда электронная почта попадает в очередь, Laravel необходимо сериализовать все данные электронной почты, чтобы ее можно было вызвать позже, когда очередь обрабатывается.

Проблема заключается в том, что при попытке сериализации экземпляра модели Eloquent (в данном случае $ user) сериализованная строка будет слишком большой для хранения в очереди.

Чтобы обойти это, сохраните нужные значения в массиве перед вызовом Mail::queueOn и прикрепите этот массив к закрытию, которое вы передаете в качестве аргумента Mail::queueOn.

$data = array(
    'email' => $user->email,
    'username' => $user->username
);

Mail::queueOn(
    Config::get('confide::email_queue'),
    Config::get('confide::email_account_confirmation'),
    compact('user'),
    function ($message) use ($data) {
        $message
            ->to($data['email'], $data['username'])
            ->subject(Lang::get('confide::confide.email.account_confirmation.subject'));
    }
);

Я нашел решение, глядя на эту проблему в GitHub

У нас было это в последнее время с тем же вопросом, но я нашел еще одну вещь, которая не так:

Config::get('confide::email_queue'),
Config::get('confide::email_account_confirmation'),

а также

(Lang::get('confide::confide.email.account_confirmation.subject'));

не правильно. Там нет 2:: для имени файла, это:

Config::get('confide.email_queue');

и так далее для всех остальных объявлений!

это

filename.arraykey
Другие вопросы по тегам