Drush Scripting?またはバッチAPI?


8

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

これらのタスクの一部は負荷が高く、PHPがタイムアウトする場合があります。DrushやBatch APIなどを通じてこれらのタスクを実行するより良い方法はありますか?

速度は必ずしも優先事項ではありませんが(ただし、優先順位は高くありません)、タイムアウトの発生を避けたいと考えています。

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

回答:


13

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

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


2
Drushに加えて、実際にキューを使用して複数のアイテムを同時に実行することもできます。
Daniel Wehner、

2

また、カスタム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

4
ここでの問題は、車輪を再発明することです。Drushは、この種の処理が既に行われており、フレームワークが既に用意されているため、より良い選択です!
Chris Cohen、

1
何かを実行したいすべてのサーバーにdrushをインストールしたくありません。
ya.teck 2011

2
理由はありますか?他のモジュールをインストールするのと同じくらい集中的です。

私は何度もそれをしていましたが、この方法は少し簡単だと思います。
ya.teck

1

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.