我使用Laravel任务计划,但是当我从控制器调用某个方法时遇到问题。
protected function schedule(Schedule $schedule)
{
$schedule->call('UserController@deleteInactiveUsers')->everyMinute();
//$schedule->call('App\Http\Controllers\UserController@deleteInactiveUsers')->everyMinute();
}
当我使用未注释的行调用时,我收到此错误:
[ReflectionException]
Class RecurrenceInvoiceController does not exist
然后我插入完全限定的命名空间路径,然后我收到此错误:
[PDOException] SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
并且
[ErrorException] PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Name or service not known
问题出在哪里?从Laravel任务调度中调用Controller的方法是正确的。
答案 0 :(得分:15)
$schedule->call('App\Http\Controllers\MyController@MyAction')->everyMinute();
我希望这能帮助别人;)
答案 1 :(得分:2)
直接将其放在kernel.php文件的schedule函数中
$ schedule-> call('App \ Http \ Controllers \ YourController @ function')-> everyMinute();
这将每分钟运行一次
注意:
在localhost中,您必须手动运行它,但在服务器上,应在cronjob中尝试此命令,这将在每分钟后自动调用控制器函数
php -d register_argc_argv =在/ home / iflasity / public_html / foldername / artisan schedule:run> / dev / null 2>&1
cd / home / iflasity / public_html / foldername && php artisan schedule:运行/ dev / null 2>&1
答案 2 :(得分:1)
对我来说,第一个错误看起来需要运行composer update
,然后composer dump-autoload
。
如果它有效,你也会得到第二个错误,2002错误意思是:
无法通过套接字连接到本地MySQL服务器“(参见(MySQL文档中的客户端错误代码和消息)。
您需要在.env
文件中设置数据库配置
答案 3 :(得分:0)
现在我用更简单的功能测试在数据库中插入新货币。这是代码:
public function handle()
{
$currency = new Currency();
$currency->currency_name = 'EUR';
$currency->save();
$this->info('New currency is successfully generated!');
}
此功能来自laravel/app/Console/Commands
。我从Kernel > schedule()
致电。不行。
当我向handle()
函数插入简单的日志写入时,如:
File::put(base_path() . '/storage/logs/test_logs.txt', 'Test log ' . Carbon::now()->format('Y-m-d H:i:s') . PHP_EOL);
这是有效的。但是当我尝试从Models
创建新对象并保存到db - >这不起作用。
答案 4 :(得分:0)
行。我解决了这个问题。问题出在Docker Cron容器上。 Cron容器没有与MySQL容器链接。 谢谢你的所有答案。