2012-08-02 38 views
1

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

我见过使用resque-status的答案here,是唯一的解决方案吗?还是有另一种方式通过正常的resque(我已经实现)提醒用户?

回答

4

如果您打算以异步方式通知用户,你有三种选择:

  1. 坐落在数据库中的标志,然后更改用户界面,他们在下次登录时(如在警报视图弹出或者其他)
  2. 在工作结束时给他们发一封电子邮件。只需使用标准的ActionMailer的东西。
  3. 如果您使用的是像Faye或Juggernaut这样的pubsub框架,请将该工作完成的通知推送给用户。如果他们登录,他们应该立即看到它。

这几乎是我能想到的唯一的东西。我会亲自去1和2的组合;完成后向他们发送电子邮件,并在下次登录时通知他们(并在通知中提供链接)。

+0

我正想看看向用户发送电子邮件以及道路,所以非常感谢!我不确定我怎么没有想到数据库中的标志,这是非常合理的。 – 2012-08-02 15:46:13

+0

3肯定是最优雅的解决方案,现在正在调查 – Orlando 2012-08-22 21:43:42

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