2015-01-25 2 views
0

Я используюLaravel почта очередями - Недостаточно данных для десериализации

Ubuntu 
laravel 4.2 
beanstalked 

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

php artisan queue:work 

возвращает

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

почты функции (Confide пакет)

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')); 
    } 
); 

Я нашел решение, глядя на this issue in GitHub

0

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

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 
+0

тот же результат, я думаю, что эта функция работает, потому что Beanstalk консоль показывает «готов ток-рабочие-» значение –