laravel / framework

The Laravel Framework.
https://laravel.com
MIT License
32.22k stars 10.91k forks source link

[5.2] Job problem with serialization #11867

Closed RKostadinov closed 8 years ago

RKostadinov commented 8 years ago

I am using Queues and Jobs and noticed that in vendor/laravel/framework/src/Illuminate/Queue/Queue.php file in function createPayload() on line 72:

'data' => ['command' => serialize(clone $job)],   // <--- PhpStorm says  - Call to method __clone from invalid context

And in laravel.log throws this error:

production.ERROR: exception 'PDOException' with message 'You cannot serialize or unserialize PDO instances' in /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Queue/Queue.php:79
Stack trace:
#0 [internal function]: PDO->__sleep()
#1 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Queue/Queue.php(79): serialize(Object(App\Jobs\PingJob))
#2 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Queue/DatabaseQueue.php(96): Illuminate\Queue\Queue->createPayload(Object(App\Jobs\PingJob), '')
#3 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(140): Illuminate\Queue\DatabaseQueue->later('20', Object(App\Jobs\PingJob))
#4 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(118): Illuminate\Bus\Dispatcher->pushCommandToQueue(Object(Illuminate\Queue\DatabaseQueue), Object(App\Jobs\PingJob))
#5 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(67): Illuminate\Bus\Dispatcher->dispatchToQueue(Object(App\Jobs\PingJob))
#6 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Foundation/Bus/DispatchesJobs.php(17): Illuminate\Bus\Dispatcher->dispatch(Object(App\Jobs\PingJob))
#7 /home/vagrant/Code/app/Jobs/PingJob.php(48): App\Jobs\PingJob->dispatch(Object(App\Jobs\PingJob))
#8 [internal function]: App\Jobs\PingJob->handle()
#9 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Container/Container.php(507): call_user_func_array(Array, Array)
#10 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(82): Illuminate\Container\Container->call(Array)
#11 [internal function]: Illuminate\Bus\Dispatcher->Illuminate\Bus\{closure}(Object(App\Jobs\PingJob))
#12 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(139): call_user_func(Object(Closure), Object(App\Jobs\PingJob))
#13 [internal function]: Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(App\Jobs\PingJob))
#14 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(103): call_user_func(Object(Closure), Object(App\Jobs\PingJob))
#15 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Bus/Dispatcher.php(83): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#16 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Queue/CallQueuedHandler.php(41): Illuminate\Bus\Dispatcher->dispatchNow(Object(App\Jobs\PingJob))
#17 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php(129): Illuminate\Queue\CallQueuedHandler->call(Object(Illuminate\Queue\Jobs\DatabaseJob), Array)
#18 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Queue/Jobs/DatabaseJob.php(50): Illuminate\Queue\Jobs\Job->resolveAndFire(Array)
#19 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(208): Illuminate\Queue\Jobs\DatabaseJob->fire()
#20 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(159): Illuminate\Queue\Worker->process('database', Object(Illuminate\Queue\Jobs\DatabaseJob), 0, 0)
#21 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(111): Illuminate\Queue\Worker->pop('database', NULL, 0, 3, 0)
#22 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Queue/Worker.php(87): Illuminate\Queue\Worker->runNextJobForDaemon('database', NULL, 0, 3, 0)
#23 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(104): Illuminate\Queue\Worker->daemon('database', NULL, 0, 128, 3, 0)
#24 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php(72): Illuminate\Queue\Console\WorkCommand->runWorker('database', NULL, 0, 128, true)
#25 [internal function]: Illuminate\Queue\Console\WorkCommand->fire()
#26 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Container/Container.php(507): call_user_func_array(Array, Array)
#27 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Console/Command.php(169): Illuminate\Container\Container->call(Array)
#28 /home/vagrant/Code/vendor/symfony/console/Command/Command.php(256): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#29 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Console/Command.php(155): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#30 /home/vagrant/Code/vendor/symfony/console/Application.php(787): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#31 /home/vagrant/Code/vendor/symfony/console/Application.php(186): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Queue\Console\WorkCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#32 /home/vagrant/Code/vendor/symfony/console/Application.php(117): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#33 /home/vagrant/Code/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(107): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#34 /home/vagrant/Code/artisan(41): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#35 {main}  

What can cause this error?

GrahamCampbell commented 8 years ago

You need to use the serializes models trait.

GrahamCampbell commented 8 years ago

use Illuminate\Queue\SerializesModels;

mohammedALhakmy commented 9 months ago

[2023-12-02 13:45:04] local.ERROR: Serialization of 'Closure' is not allowed {"exception":"[object] (Exception(code: 0): Serialization of 'Closure' is not allowed at /home/u153529252/domains/asgroup2030.com/public_html/Data_System_Enterprises/vendor/laravel/framework/src/Illuminate/Queue/Queue.php:159) [stacktrace] what is this prolem