我有以下情况:
1.有人在Redmine创建任务
2.使用此任务完成(或未完成)某些事情
3.如果创建任务已经过去3天且状态不正确,请发送电子邮件给感兴趣的人。
我的问题是如何使用Rails在三天内安排电子邮件(或检查是否需要电子邮件的任务)?到目前为止,我能想到的唯一选择是创建一些rake任务并每隔几分钟运行一次。有更好的选择吗?
答案 0 :(得分:1)
你有几个选择。您可能希望查看Active Job(Rails> 4.2)。这使您可以安排作业在指定的时间段后运行:
MyJob.set(wait_until: Time.now + 3.days).perform_later(record)
如果您使用4.2之前的版本的导轨,则可以使用DelayedJob或Sidekiq或Resque。无论如何,Active Job本质上都是这样的一个层次,所以稍后迁移到那个不应该太痛苦。
或者,如果您在3天之后不需要检查,那么您可以扫描需要使用cron生成电子邮件的任务(whenever是一个很好的包装器)。你可以随心所欲地进行扫描,虽然每隔几分钟就可能过度,这意味着你不必在服务器上设置排队后端。
这确实意味着您必须找到需要为其生成电子邮件的任务,而使用排队系统,您将确切地知道您已经处理了哪个任务。然而,似乎很多这些任务都不需要电子邮件,所以积极寻找那些可能更有效率。
答案 1 :(得分:0)
作为替代方案,您可以使用https://github.com/resque/resque和https://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