2015-04-30 84 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