如何在resque作业完成时提醒用户

时间:2012-08-02 14:54:14

标签: ruby-on-rails ruby redis resque

我在rails应用程序上使用resque gem来处理后台作业。我有用户触发后台工作,可能需要10分钟才能完成(他们正在处理大量数据)。在作业完成后提醒用户的最佳方法是什么?

我已经看到了关于使用resque-status的答案here,这是唯一的解决方案吗?或者是否有其他方式通过正常的resque提醒用户(我已经实施过)?<​​/ p>

2 个答案:

答案 0 :(得分:4)

如果您打算以异步方式通知用户,则有三个选项:

  1. 在数据库中设置一个标志,然后在下次登录时更改您的UI。(如在警报视图中弹出一样。)
  2. 在工作结束时向他们发送电子邮件。只需使用标准的ActionMailer即可。
  3. 如果您正在使用像Faye或Juggernaut这样的pubsub框架,请向用户发送作业已完成的通知。如果他们已登录,他们应立即看到。
  4. 这几乎是我能想到的唯一事情。我个人会选择1和2的组合;在完成时向他们发送电子邮件,并在他们下次登录时通知他们(并在通知中提供链接)。

答案 1 :(得分:3)

您可以使用名为“resque-status”的宝石。

使用此gem可以轻松获得作业状态:

status = Resque::Plugins::Status::Hash.get(job_id)

Resque::Plugins::Status::Hash对象返回:

status.pct_complete #=> 0
status.status #=> 'queued'
status.queued? #=> true
status.working? #=> false
status.time #=> Time object        
status.message #=> "Created at ..."

有关详细信息并获取此宝石访问:https://github.com/quirkey/resque-status