22

サーバーで ffmpeg 変換をキューに入れ、実行するためにphp-resqueを使用しようとしています。私はそれがどのように機能するかを大まかに理解していますが、詳細に問題があり、チュートリアルが見つかりません。具体的には、ジョブ クラスをどこに配置すればよいか、ワーカーにクラスを与えてワーカーを起動する方法がわかりません。read me には、「アプリケーションを開始するには、オートローダーを使用するか、それらを含めることによって、ワーカーにジョブ クラスを伝えることも含まれます」とだけ書かれています。

うまくいけば、誰かが php-resque を使用する全体的な構造の概要を説明できます。

4

2 に答える 2

37

ジョブクラスは好きな場所に配置できます。アプリケーションの構造によって異なります。

ジョブクラスの作成方法

たとえばVideoConversion、ffmpeg 変換に使用される class を考えてみましょう。

class VideoConversion {

    public function perform() {
        // The code for video conversion here
    }

}

メインアプリケーションで、php-resque を使用する前に、そのようなものがあるとしましょう

public function uploadVideo() {
    // Upload and move the video to a temp folder
    // Convert the video
}

そして、「ビデオの変換」部分をキューに入れたいとします。それをキューに入れましょうconvert

public function uploadVideo() {
    // Upload and move the video to a temp folder
    // Let's suppose you need to convert a 'source video' to a 'destination video'
    Resque::enqueue('convert', 'VideoConversion', array('origine-video.avi', 'destination-video.avi'));
}

ジョブをキューに入れるときに、ソース ビデオと宛先ビデオへのパスを VideoConversion クラスに渡しました。他の引数を渡すことができます。これは、VideoConversion クラスの記述方法によって異なります。

次にワーカーがconvertキューをポーリングし、VideoConversionジョブを実行します。ワーカーが行うことは、VideoConversion クラスをインスタンス化し、perform()メソッドを実行することです。

array('origine-video.avi', 'destination-video.avi')でジョブをキューに入れるときの 3 番目の引数であるジョブ引数 ( ) は、を介してメソッドResque::enqueue内で使用できます。perform()$this->args

# VideoConversion.php
class VideoConversion
{
    public function perform() {
    // $this->args == array('origine-video.avi', 'destination-video.avi');
    // Convert the video
}

ジョブクラスを見つける

クラスはVideoConversionどこにでも配置できますが、どこにあるかをワーカーに伝える必要があります。それを行うには複数の方法があります

ジョブクラスを include_path に入れます

.htaccess または apache 構成で、すべてのジョブ クラスを含むディレクトリをインクルード パスに追加します。あなたの労働者はそれらを自動的に見つけます。

この方法の主な問題は、すべてのジョブ クラスが同じフォルダーにある必要があり、すべてのジョブ クラスがどこからでも利用できることです。

各ワーカーにジョブ クラスの場所を伝える

ワーカーを開始するときは、APP_INCLUDE引数を使用してジョブ クラス 'autoloader' を指定します。

APP_INCLUDE=/path/to/autoloader.php QUEUE=convert php resque.php

上記のコマンドは、という名前のキューをポーリングして、新しいワーカーを開始しますconvertまた、ファイル/path/to/autoloader.phpをワーカーに渡します。(ワーカーの開始方法については、こちらを参照してください)

技術的には、ワーカーはそのファイルをinclude '/path/to/autoloader.php';.

次に、ワーカーにジョブ クラスの検索方法を指示できます。

基本インクルードを使用する

「/path/to/autoloader.php」で:

include /path/to/VideoConversion.php
include /path/to/anotherClass.php
...

オートローダーを使用する

php autoloader を使用して、ジョブ クラスをロードします。

使用するset_include_path()

set_include_path('path/to/job');

そうすれば、あなたの仕事はinclude_pathこの労働者だけのものになります。

最後に

APP_INCLUDE起動しているワーカーにバインドされています。別のワーカーを開始する場合は、APP_INCLUDEもう一度使用してください。ワーカーごとに異なるファイルを使用できます。

複数のジョブを実行するようにジョブ クラスを設計することもできます。その方法を説明するチュートリアルがあります。キューシステムの基本から使用方法、実装方法までをカバーしています。

それでも不十分な場合は、resque のドキュメントを参照してください。php-resque API はまったく同じです。唯一の違いは、Resque ジョブ クラスが Ruby で記述されているのに対し、php-resque のジョブ クラスは php で記述されていることです。

于 2012-10-22T03:49:53.503 に答える