9

私のアプリケーションでは、Resqueを使用して画像のサイズを変更しています。画像がサイズ変更キューにある場合、「画像のサイズ変更」アイコンを表示したいと思います。

これは、キュー内の特定のモデルIDに関連する現在のすべてのジョブを検索できる必要があることを意味します。今、私はこのようにしています:

Resque.peek(:resize, 0, 100).find_all { |job| /#{model.id}/.match(job["args"][0]) }

これはばかげています。しかし、Resqueキューを照会して、最初の引数が[id]に等しいすべてのジョブを見つける方法はありますか?

前もって感謝します。

4

3 に答える 3

10

resque -statusを試してみてください。これは、ジョブ追跡を追加するResqueの拡張機能です。

resque-statusは、resqueのデフォルト機能(0%のモンキーパッチを適用)を拡張する一連の単純なクラスを提供し、アプリに特定のジョブインスタンスとそのステータスを追跡する方法を提供します。これは、ジョブインスタンスにUUIDを与え、ジョブインスタンスが反復内からステータスを報告できるようにすることで実現されます。

注:d11wtqはこれをコメントとして上記で言及しましたが、実際にはこれまでのところ最良の回答です。

于 2012-07-22T21:56:15.827 に答える
5

resqueキューをクエリする代わりに、モデルと一緒に画像メタデータを保存する必要があります。

商品画像を保存しているとしましょう。製品の詳細を保存するためにRedisハッシュを使用している可能性があります。このような別のフラグを追加するだけです-

hset product:123 is_resizing true

簡単なルックアップを実行して、サイズ変更画像アイコンを表示できます。resqueジョブの最後に、キーを削除し、is_resizingキーを追加しresized_image_urlます。

于 2012-05-02T07:36:04.607 に答える
0

最も簡単な方法は、redisセットを使用してこの情報をキャッシュすることだと思います。

'resize'キューに画像を追加するときは、SADDを使用して'resize_in_progress'セットに画像IDも追加します。(データベースに保存されていない場合でも、イメージを参照するための何らかの一意のキーまたは名前があると思います。ファイル名へのフルパスかもしれません。)

'resize'プロセスでは、イメージのサイズ変更に成功した後の最後のアクションの1つとして、SREMコマンドを使用してセットからイメージを削除します。

すべての画像のリストが必要な場合は、SMEMBERSを使用してそれを取得できます。特定のモデルIDのメンバーのみが必要な場合は、「resize_in_progress_3451」のような名前のモデルごとに個別のセットを保存する必要があります。ここで、3451は、サイズ変更される画像を持つモデルのIDです。

その他のsetコマンドについては、 http://redis.io/commands#setを参照してください。

于 2012-09-25T13:23:27.493 に答える