2015-04-30 71 views
3

我有“随机”有些工作我beanstalked队列失败。 两个问题:为什么在Beanstalkd队列作业失败 - Laravel 4.2

1 /通过查看数据库失败的作业表哪能interprate里面是什么记录?数据关闭意味着在读取原始数据时“没有”。有什么需要做更多的信息?

2 /我通过Laravel的控制台日志去了,这就是失败:

[2015-04-29 15:40:51] production.ERROR: exception 'ErrorException' with message 'Trying to get property of non-object' in /home/forge/api.hello.me/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/SerializableClosure.php(99) : eval()'d code:6 
Stack trace:... 

但我不知道究竟是什么失败...堆栈跟踪不帮助,只是开始于

[internal function]: Jeremeamia\SuperClosure\SerializableClosure::{closure}(Object(Illuminate\Queue\Jobs\BeanstalkdJob)) 
#2 /home/forge/api.hello.me/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/SerializableClosure.php(64): ReflectionFunction->invokeArgs(Array) 

,完成了几行后在

#15 /home/forge/api.hello.me/vendor/symfony/console/Symfony/Component/Console/Application.php(124): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
    #16 /home/forge/api.hello.me/artisan(59): Symfony\Component\Console\Application->run() 
    #17 {main} [] [] 

我如何能理解任何想法/找到OU发生了什么?队列甚至没有失败所有的时间...

PS:全堆栈跟踪:

#0 /home/forge/api.hello.me/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/SerializableClosure.php(99) : eval()'d code(6): Illuminate\Exception\Handler->handleError(8, 'Trying to get p...', '/home/forge/api...', 6, Array) 
#1 [internal function]: Jeremeamia\SuperClosure\SerializableClosure::{closure}(Object(Illuminate\Queue\Jobs\BeanstalkdJob)) 
#2 /home/forge/api.hello.me/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/SerializableClosure.php(64): ReflectionFunction->invokeArgs(Array) 
#3 /home/forge/api.hello.me/vendor/laravel/framework/src/Illuminate/Queue/IlluminateQueueClosure.php(36): Jeremeamia\SuperClosure\SerializableClosure->__invoke(Object(Illuminate\Queue\Jobs\BeanstalkdJob)) 
#4 /home/forge/api.hello.me/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(96): IlluminateQueueClosure->fire(Object(Illuminate\Queue\Jobs\BeanstalkdJob), Array) 
#5 /home/forge/api.hello.me/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php(50): Illuminate\Queue\Jobs\Job->resolveAndFire(Array) 
#6 /home/forge/api.hello.me/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(205): Illuminate\Queue\Jobs\BeanstalkdJob->fire() 
#7 /home/forge/api.hello.me/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(157): Illuminate\Queue\Worker->process('beanstalkd', Object(Illuminate\Queue\Jobs\BeanstalkdJob), '3', '0') 
#8 /home/forge/api.hello.me/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(105): Illuminate\Queue\Worker->pop('beanstalkd', 'default', '0', '10', '3') 
#9 /home/forge/api.hello.me/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(67): Illuminate\Queue\Console\WorkCommand->runWorker('beanstalkd', 'default', '0', '128', false) 
#10 /home/forge/api.hello.me/vendor/laravel/framework/src/Illuminate/Console/Command.php(112): Illuminate\Queue\Console\WorkCommand->fire() 
#11 /home/forge/api.hello.me/vendor/symfony/console/Symfony/Component/Console/Command/Command.php(253): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#12 /home/forge/api.hello.me/vendor/laravel/framework/src/Illuminate/Console/Command.php(100): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#13 /home/forge/api.hello.me/vendor/symfony/console/Symfony/Component/Console/Application.php(889): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#14 /home/forge/api.hello.me/vendor/symfony/console/Symfony/Component/Console/Application.php(193): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#15 /home/forge/api.hello.me/vendor/symfony/console/Symfony/Component/Console/Application.php(124): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput)) 
#16 /home/forge/api.hello.me/artisan(59): Symfony\Component\Console\Application->run() 
#17 {main} [] [] 
+0

堆栈跟踪和错误日志似乎并不在此情况下,非常有帮助。你可能会发布被推入队列的代码吗? – Bogdan

+0

通过查看失败的作业,您可以看到正在调用的类/函数。打印出来的日志,并找到崩溃......你可以从失败的队列repush工作,所以你应该能够赶上这些工作,并复制它们 – NiRR

+0

我们需要看到你推什么。 – Ravan

回答

0

方式Laravel队列工作是序列化所有你提供的​​的数据,它坚持认为在你的数据库中。当您处理队列中,它会奇迹般地反序列化所有这些数据,这样你已经基本上在内存中,当你弹出它放入队列也做了同样的对象。 当你改变一个序列化对象的类定义,或者你的对象没有完全正确地序列化时(这似乎是这里的情况),问题就出现了......

我建议你不要序列化匿名函数,因为Laravel使用SuperClosure来做到这一点,而且它非常黑。

[internal function]: Jeremeamia\SuperClosure\SerializableClosure::{closure}(Object(Illuminate\Queue\Jobs\BeanstalkdJob))

尝试推简单的对象到你的魔豆队列(即不发送对象队列),你不会有这个问题。

+0

谢谢,我会尝试再次更改,奇怪的是,队列只会获取ID或字符串,然后在队列中再次加载模型。 – commandantp

+0

表中的数据是什么样的? – infomaniac

+0

只是一个ID号码,是自动增加的号码。啊...用户名太多,也许特殊字符可能会导致问题? – commandantp