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 集来缓存这些信息。

当您将图像添加到“调整大小”队列时,还要使用 SADD 将图像 ID 添加到“resize_in_progress”集。(我假设您有某种唯一键或名称来引用图像,即使没有存储在数据库中。也许是文件名的完整路径。)

在“调整大小”过程中,作为成功调整图像大小后的最终操作之一,使用 SREM 命令将其从集合中删除。

当您想要所有图像的列表时,您可以使用 SMEMBERS 获取它。如果您只需要特定模型 id 的成员,您可能需要为每个模型存储一个单独的集合,命名为“resize_in_progress_3451”,其中 3451 是调整图像大小的模型的 id。

有关更多设置命令,请参见http://redis.io/commands#set

于 2012-09-25T13:23:27.493 回答