Rails根据用户输入创建新的cron作业

时间:2013-09-15 15:53:53

标签: ruby-on-rails cron background-process whenever cron-task

在我的应用程序中,我希望每两周根据用户触发操作的时间调用一个操作。我想有什么令人困惑的是为什么似乎没有这样做的直接方式。

理想情况下,重复的作业将在模型中设置而不是其他文件。例如,whenever gem有这些instructions

  

入门

     

$ cd /apps/my-great-project

     

$ wheneverize .

     

这将为您创建初始config/schedule.rb文件。

但我不想把我的日程安排在那里。我希望时间表在我的模型中。我没有设置时间表,它是由我的用户设置的。

有没有直接的方法来实现这个?几个星期以来,我一直对此感到难过。

1 个答案:

答案 0 :(得分:0)

你可以使用延迟工作。

http://asciicasts.com/episodes/171-delayed-job

您的用户可以定义存储在模型中的作业。您将创建第一个延迟的作业,并且在每个完成的作业之后,您可以开始新的延迟作业。

如果您的用户创建的作业应该在凌晨3:00运行,并且他在下午3:00保存该作业,则需要创建第一份作业:

Delayed::Job.enqueue(CronJob.new(params[:id]), 1, 12.hours.from_now ) 

在开始这项工作之前,你将创建下一份工作

Delayed::Job.enqueue(CronJob.new(params[:id]), 1, 1.days.from_now )