这意味着我需要能够找到与特定模型ID相关的所有当前作业。现在我是这样做的:
Resque.peek(:resize, 0, 100).find_all { |job| /#{model.id}/.match(job["args"][0]) }
这很愚蠢。但是有没有办法查询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集合来缓存这些信息。
当您将图像添加到“resize”队列时,还可以使用SADD将图像ID添加到“resize_in_progress”集合中。(我假设您有某种唯一的键或名称来引用图像,即使未存储在数据库中。也许是完整的文件名路径。)
在“resize”过程中,在成功调整图像大小后的最终操作之一是使用SREM命令从集合中删除它。
当您想要获取所有图像的列表时,可以使用SMEMBERS进行获取。如果您只想获取特定模型ID的成员,则可能需要为每个模型存储单独的集合,命名为“resize_in_progress_3451”,其中3451是正在调整大小的图像所属模型的ID。
请参见http://redis.io/commands#set以获取更多集合命令。
Resque.peek(:resize, 0, 100).find_all...
这个例子很愚蠢? - David J.Resque.queues[:resize]
代替Resque.peek(:resize, 0, 100)
。 - David J.