我正在使用带有beanstalkd的Laravel Queues。我有以下代码:
$user_id = Auth::user()->id;
Queue::push(function($job)
{
solve_simplex();
$job->delete();
});
其中solve_simplex()是我在php中的自定义函数添加为扩展名。
作业排队等等但是当我想运行php artisan队列时:工作最终得到:
php artisan queue:work
PHP Fatal error: Call to undefined function solve_simplex() in /var/www/my_site/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/SerializableClosure.php(99) : eval()'d code on line 2
PHP Stack trace:
PHP 1. {main}() /var/www/my_site/artisan:0
PHP 2. Symfony\Component\Console\Application->run() /var/www/my_site/artisan:59
PHP 3. Symfony\Component\Console\Application->doRun() /var/www/my_site/vendor/symfony/console/Symfony/Component/Console/Application.php:121
PHP 4. Symfony\Component\Console\Application->doRunCommand() /var/www/my_site/vendor/symfony/console/Symfony/Component/Console/Application.php:191
PHP 5. Illuminate\Console\Command->run() /var/www/my_site/vendor/symfony/console/Symfony/Component/Console/Application.php:887
PHP 6. Symfony\Component\Console\Command\Command->run() /var/www/my_site/vendor/laravel/framework/src/Illuminate/Console/Command.php:96
PHP 7. Illuminate\Console\Command->execute() /var/www/my_site/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:241
PHP 8. Illuminate\Queue\Console\WorkCommand->fire() /var/www/my_site/vendor/laravel/framework/src/Illuminate/Console/Command.php:108
PHP 9. Illuminate\Queue\Worker->pop() /var/www/my_site/vendor/laravel/framework/src/Illuminate/Queue/Console/WorkCommand.php:64
PHP 10. Illuminate\Queue\Worker->process() /var/www/my_site/vendor/laravel/framework/src/Illuminate/Queue/Worker.php:71
PHP 11. Illuminate\Queue\Jobs\BeanstalkdJob->fire() /var/www/my_site/vendor/laravel/framework/src/Illuminate/Queue/Worker.php:119
PHP 12. Illuminate\Queue\Jobs\Job->resolveAndFire() /var/www/my_site/vendor/laravel/framework/src/Illuminate/Queue/Jobs/BeanstalkdJob.php:50
PHP 13. IlluminateQueueClosure->fire() /var/www/my_site/vendor/laravel/framework/src/Illuminate/Queue/Jobs/Job.php:96
PHP 14. Jeremeamia\SuperClosure\SerializableClosure->__invoke() /var/www/my_site/vendor/laravel/framework/src/Illuminate/Queue/IlluminateQueueClosure.php:16
PHP 15. ReflectionFunction->invokeArgs() /var/www/my_site/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/SerializableClosure.php:64
PHP 16. Jeremeamia\SuperClosure\SerializableClosure::{closure:/var/www/my_site/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/SerializableClosure.php(99) : eval()'d code:1-4}() / var/www/my_site/vendor/jeremeamia/SuperClosure/src/Jeremeamia/SuperClosure/SerializableClosure.php:64
{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Call to undefined function solve_simplex()","file":"\/var\/www\/my_site\/vendor\/jeremeamia\/ SuperClosure\/src\/Jeremeamia\/SuperClosure\/SerializableClosure.php(99) : eval()'d code","line":2}}
更新
看起来我的扩展程序未加载。但它不会仅在该闭包中加载。如果我在普通的laravel代码中运行函数solve_simpex()(例如在控制器中,那么它可以正常工作并且加载扩展....
答案 0 :(得分:1)
我找到了解决方案。问题是通过命令调用superclosure:
php artisan队列:工作
通过CLI和idk调用它为什么不加载扩展名。
解决方案是使用-d参数运行工匠:
php -dextension = solveSimplex.so artisan queue:work
所以我不得不告诉php CLI加载该扩展......