web-dev-qa-db-ja.com

Admin-Ajaxがタイムアウトしましたか?

私はプラグインを書き、 admin-ajax を使っています。これは長時間実行される機能です。つまり、APIに接続して投稿に読み込むことです。これは時々5-10分かかるかもしれません。 1〜2分後に私のAJAX呼び出しが "502(Bad Gateway)"エラー応答を受け取り、PHP側の作業がその時点で停止したようです。

  1. Admin-ajaxでできることにタイムアウトはありますか?
  2. Admin-ajax以外のプラグインで "長時間実行"のアクティビティを実行するためのより良い方法はありますか?

ありがとうございます。

2
GavinR

TCPまたはPHP実行時間にかかわらず、常にタイムアウトがあります(サーバーを奇妙な方法で設定しない限り、PHPは長時間のタスクを強制終了します)。 。

あなたが多くの仕事をする必要があるならば、あなたはそうするべきです:

細かく砕く

Regenサムネールのようなプラグインは、作業する項目のリストを取得してから、リストを小さい高速バッチで調べていきます。 10分の作業を実行できますが、1回の要求で100万件の作業を行うのではなく、100万件の要求で1つの作業を行う方が適切です。

WP CLI

高価な時間のかかる作業はフロントエンドで行うべきではありません。コマンドラインで実行する必要があります。 これが最善の方法であり、推奨されます

必要なことを実行するWP CLIコマンドを実装して実行します。これはPHP実行タイムアウトと、発生する可能性のある接続タイムアウトを完全に回避します。コードに十分なシステムリソースがあり、メモリリークを防ぐために自動的にクリーンアップする場合、WP CLIコマンドは何時間も実行される可能性があります。データを渡す必要がある場合は、パラメータを使用してそれを行います。

cLIにアクセスできない場合は、マネージドホストサービスまたは共有ホスティングサービスを使用しています。その場合は、ホストを移動するか(共有ホスティングに問題がある)、サイトをローカルマシンにダウンロードして実行します。ローカルでCLIコマンドを実行してから結果をアップロードする

4
Tom J Nowell