Я никогда раньше не настраивал систему очередей. Я решил сделать это. Кажется, система очередей работает отлично. Однако, похоже, данные отправляются правильно. Вот мой код.Передача данных в класс очереди с использованием Laravel 4.1 и Beanstalkd
...
$comment = new Comment(Input::all());
$comment->user_id = $user->id;
$comment->save();
if ($comment->isSaved())
{
$voters = $comment->argument->voters->unique()->toArray();
Queue::push('Queues\NewComment',
[
'comment' => $comment->load('argument', 'user')->toArray(),
'voters' => $voters
]
);
return Response::json(['success' => true, 'comment' => $comment->load('user')->toArray()]);
}
...
Класс, который обрабатывает это выглядит следующим образом:
class NewComment {
public function fire($job, $data)
{
$comment = $data['comment'];
$voters = $data['voters'];
Log::info($data);
foreach ($voters as $voter)
{
if ($voter['id'] != $comment['user_id'])
{
$mailer = new NewCommentMailer($voter, $comment);
$mailer->send();
}
}
$job->delete();
}
}
Это прекрасно работает на моем локальном сервере с помощью драйвера синхронных очередей. Однако на моем производственном сервере я использую Beanstalkd. Очередь стреляет, как и предполагалось. Тем не менее, я получаю сообщение об ошибке, как это:
[2013-12-19 10:25:02] production.ERROR: exception 'ErrorException' with message 'Undefined index: voters' in /var/www/mywebsite/app/queues/NewComment.php:10
Если я распечатать $data
переменные, передаваемую в обработчик NewComment
очереди, я получаю это:
[2013-12-19 10:28:05] production.INFO: {"comment":{"incrementing":true,"timestamps":true,"exists":true}} [] []
Я понятия не имею, почему это происходит. У кого-нибудь есть идея, как это исправить.