Rails:经过一段时间后发送邮件

时间:2015-01-29 09:23:15

标签: ruby-on-rails plugins redmine

我有以下情况:
1.有人在Redmine创建任务 2.使用此任务完成(或未完成)某些事情 3.如果创建任务已经过去3天且状态不正确,请发送电子邮件给感兴趣的人。

我的问题是如何使用Rails在三天内安排电子邮件(或检查是否需要电子邮件的任务)?到目前为止,我能想到的唯一选择是创建一些rake任务并每隔几分钟运行一次。有更好的选择吗?

3 个答案:

答案 0 :(得分:1)

你有几个选择。您可能希望查看Active Job(Rails> 4.2)。这使您可以安排作业在指定的时间段后运行:

MyJob.set(wait_until: Time.now + 3.days).perform_later(record)

如果您使用4.2之前的版本的导轨,则可以使用DelayedJobSidekiqResque。无论如何,Active Job本质上都是这样的一个层次,所以稍后迁移到那个不应该太痛苦。

或者,如果您在3天之后不需要检查,那么您可以扫描需要使用cron生成电子邮件的任务(whenever是一个很好的包装器)。你可以随心所欲地进行扫描,虽然每隔几分钟就可能过度,这意味着你不必在服务器上设置排队后端。

这确实意味着您必须找到需要为其生成电子邮件的任务,而使用排队系统,您将确切地知道您已经处理了哪个任务。然而,似乎很多这些任务都不需要电子邮件,所以积极寻找那些可能更有效率。

答案 1 :(得分:0)

作为替代方案,您可以使用https://github.com/resque/resquehttps://github.com/zapnap/resque_mailer

希望这有帮助。

答案 2 :(得分:0)

您可以使用Whenever来安排作业/任务/方法调用..几乎任何事情

JUST add the gem ... run bundle install .. add your code .... update the schedule.rb

例如:

##in schedule.rb
every 5.minutes do
    p "============Running rake task Only"
    rake "events:notify_user"
end

 every 2.hours do   
    p "============Running rake task and local script as well as calling a method from your code"
   command "/usr/bin/some_great_command"
   runner "MyModel.some_method"
   rake "some:great:rake:task"
 end

您还可以观看Railscasts