簡體   English   中英

在resque隊列中查找特定作業

[英]Find specific job in resque queue

在我的應用程序中,我使用Resque來調整圖像大小。 如果圖像在調整大小隊列中,我想顯示“調整大小圖像”圖標。

這意味着我需要能夠找到與隊列中特定模型ID相關的所有當前作業。 現在我這樣做:

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

這是愚蠢的。 但有沒有辦法查詢Resque隊列以找到第一個參數等於[id]的所有作業?

提前致謝。

試試resque-status 它是Resque的擴展,可添加作業跟蹤。

resque-status提供了一組簡單的類,它們擴展了resque的默認功能(0%猴子修補),為應用程序提供了跟蹤特定作業實例及其狀態的方法。 它通過提供作業實例UUID並允許作業實例在其迭代中報告其狀態來實現此目的。

注意: d11wtq上面提到了這個評論,但實際上是目前為止最好的答案

您應該將圖像元數據與模型一起存儲,而不是查詢resque隊列。

讓我們假設您正在存儲產品圖像。 您可能使用Redis哈希來存儲產品詳細信息。 只需添加另一個這樣的標志 -

hset product:123 is_resizing true

您可以執行簡單查找以顯示調整大小圖像圖標。 在resque作業結束時,刪除is_resizing鍵,然后添加resized_image_url鍵。

我認為最簡單的方法可能是使用redis集來緩存這些信息。

將圖像添加到“調整大小”隊列時,還要使用SADD將圖像ID添加到“resize_in_progress”集。 (我假設您有一些唯一的鍵或名稱來引用圖像,即使沒有存儲在數據庫中。也許是文件名的完整路徑。)

在“調整大小”過程中,作為成功調整圖像大小后的最后一個操作之一,使用SREM命令將其從集合中刪除。

如果需要所有圖像的列表,可以使用SMEMBERS獲取。 如果您只想要特定模型ID的成員,則可能需要為每個模型存儲一個單獨的集合,名稱類似於“resize_in_progress_3451”,其中3451是具有調整大小的圖像的模型的ID。

有關更多set命令,請參見http://redis.io/commands#set

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM