Laravel Task Schedulingを使用していますが、コントローラーからいくつかのメソッドを呼び出すときに問題があります。
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 Task Schedulingからコントローラーからメソッドを呼び出すのが正しい方法です。
何ヶ月か前に、同じ問題で修正できるまでつまずきました。私はlaravel 5.2を使用し、カーネルは私のドライバを次のように呼び出します:
$schedule->call('App\Http\Controllers\MyController@MyAction')->everyMinute();
私はこれが他の誰かを助けることを願っています;)
私にとって、最初のエラーはcomposer update
を実行してからcomposer dump-autoload
を実行する必要があるようです。
それが機能する場合、2番目のエラーも表示されます。2002エラーの意味は次のとおりです。
ソケットを介してローカルMySQLサーバーに接続できません」(MySQLドキュメントの(クライアントエラーコードとメッセージ)を参照してください)。
.env
ファイルにデータベース構成を設定する必要があります
OK。私はこの問題を解決しました。問題は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
から新しいオブジェクトを作成してdbに保存しようとすると、これは機能しません。