web-dev-qa-db-ja.com

Drush Scripting?またはバッチAPI?

私たちは毎日大量の注文を処理し、それらを処理し、請求、配送ルーティング、将来の注文作成などの他のタスクを実行するUbercartウェブサイトを持っています。

これらのタスクの一部は重いため、PHPがタイムアウトすることがあります。DrushやBatch APIなどを使用してこれらのタスクを実行するより良い方法はありますか?

速度は必ずしも優先事項ではありませんが(ニースではありますが)、タイムアウトの発生を避けたいのです。タイムアウトが発生すると、正しく課金されたり、毎日の注文のスケジュールに問題が発生したりすることがあります。

Drushスクリプトはより良いオプションですか、それともバッチAPIですか?両方をうまく利用するためのチュートリアルはありますか?

8
Kevin

バッチ操作がブラウザーに依存しているという事実のために、私はバッチAPIの使用を勧めません。なんらかの理由でブラウザがクラッシュしたり、サーバーとの接続が失われたりすると、バッチ処理が終了しないか、(さらに悪いことに)停止します。実際、PHP=タイムアウトを回避するために、バッチ操作により、ブラウザーはバッチページを定期的にpingします;これは、JavaScriptコードが関係する場合、または関係しない場合(後者の場合、 Drupalは更新メタタグを使用します)。

これらの場合、Drushがおそらくより良い選択です。特定のDrushコマンドを実装するカスタムモジュールを作成したり、Drushがコマンドに使用するディレクトリにコマンドファイルを追加したりできます。

13
kiamlaluno

また、カスタムPHP CLIスクリプトを使用することもできます。ここにdrupal 7の簡単な例を示します。

#!/usr/bin/php
<?php
echo "Ubercart tasks\n===================\n";

$_SERVER['HTTP_Host']       = 'default';
$_SERVER['PHP_SELF']        = '/index.php';
$_SERVER['REMOTE_ADDR']     = '127.0.0.1';
$_SERVER['SERVER_SOFTWARE'] = NULL;
$_SERVER['REQUEST_METHOD']  = 'GET';
$_SERVER['QUERY_STRING']    = '';
$_SERVER['PHP_SELF']        = $_SERVER['REQUEST_URI'] = '/';
$_SERVER['HTTP_USER_AGENT'] = 'console';

define('DRUPAL_ROOT', getcwd());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//-------------------------------------------

// Place your code here
2
ya.teck

「自動生成されたデジタル製品」の重要なバックエンド処理を必要とするD6 Ubercartサイトがあります。私はこれを次のように処理します:

  1. これらのカスタムデジタル製品の1つを購入すると、「コンパイルする必要がある製品」のdbテーブルエントリが発生します。そのdbエントリには「ステータス」フィールドがあります。
  2. BASHスクリプトは、バックグラウンドで実行されるDrupal内から開始されます。このスクリプトは「再入可能」です。つまり、実行中に呼び出されたことを認識し、既存の作業に新しい作業を追加しますまだ完成していません。
  3. このBASHスクリプトは、カスタムデジタル製品が作成されると、Drupalデータベースの 'status'フィールドをインクリメントします。最後に、完成したカスタム製品のダウンロードリンクを含む電子メール通知がユーザーに送信されます。

PHP CLIスクリプトを使用せず、PHPによって呼び出されるBASHスクリプトを使用しているin Drupalバックグラウンドで実行します。これらのBASHスクリプトはDrupalデータベースにアクセスし、コンパイルして顧客に送信しているすべての製品の「ステータス」値を進めます。さらに、Drupalは、これらのステータス値を確認し、「カスタム作成プロセス」で購入が現時点で発生している顧客に報告することができます。

1
Blake Senftner