我使用 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 任务调度中从控制器调用方法哪种方式是正确的。
我使用 Laravel 5.2,内核以这种方式调用我的驱动程序:
$schedule->call('App\Http\Controllers\MyController@MyAction')->everyMinute();
直接将其放入
kernel.php
中的日程功能中。
$schedule->call('App\Http\Controllers\YourController@function')->everyMinute();
这将在每分钟后运行。
注:
在本地主机中,您必须手动运行它,但在服务器上,您应该在 cronjob 中尝试此命令,这将在每分钟后自动调用您的控制器函数
php -d register_argc_argv=On /home/iflasity/public_html/foldername /artisan schedule:run > /dev/null 2>&1
cd /home/iflasity/public_html/foldername && php artisan schedule:run /dev/null 2>&1
对我来说,第一个错误看起来需要运行
composer update
,然后运行 composer dump-autoload
。
如果成功的话你还会得到第二个错误,2002错误的含义是:
无法通过套接字连接到本地 MySQL 服务器”(请参阅(MySQL 文档中的客户端错误代码和消息)。
您需要在
.env
文件中设置数据库配置
问题出在 Docker Cron 容器上。 Cron 容器未与 MySQL 容器链接。
现在我还使用更简单的函数进行测试,以在数据库中插入新货币。这是代码:
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
创建新对象并保存到数据库时 -> 这不起作用。