web-dev-qa-db-ja.com

Laravelコールコントローラのスケジューリング

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からコントローラーからメソッドを呼び出すのが正しい方法です。

12
Kikolce

何ヶ月か前に、同じ問題で修正できるまでつまずきました。私はlaravel 5.2を使用し、カーネルは私のドライバを次のように呼び出します:

$schedule->call('App\Http\Controllers\MyController@MyAction')->everyMinute();

私はこれが他の誰かを助けることを願っています;)

21
Jennifer Beuses

私にとって、最初のエラーはcomposer updateを実行してからcomposer dump-autoloadを実行する必要があるようです。

それが機能する場合、2番目のエラーも表示されます。2002エラーの意味は次のとおりです。

ソケットを介してローカルMySQLサーバーに接続できません」(MySQLドキュメントの(クライアントエラーコードとメッセージ)を参照してください)。

.envファイルにデータベース構成を設定する必要があります

1
lcjury

OK。私はこの問題を解決しました。問題はDocker Cronコンテナーにありました。 CronコンテナーはMySQLコンテナーにリンクされていませんでした。すべての回答をありがとう。

0
Kikolce

また、データベースに新しい通貨を挿入するためのより簡単な関数でテストしています。ここにコードがあります:

_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に保存しようとすると、これは機能しません。

0
Kikolce