我需要一个cron作业写入我的crontab,每隔一分钟调用一个触发方法并运行预定作业的rails应用程序的URL。
我没有使用任何宝石,因为它重新启动环境,我认为这将使我的应用程序紧张。所以我更喜欢独立于rails app运行一个完整的系统cron作业。
要调用的网址为https://xxxxxxxxx.com/scheduled_messages
,最好使用curl
进行调用。
被调用的控制器是;
class SchedulesController < ActionController::Base
def scheduled_messages
Schedule.scheduled_jobs
render nothing: true
end
end
,方法Schedule.scheduled_jobs
就在这里;
def self.scheduled_jobs
jobs = Schedule.where('execution_time <= ?', Time.now)
if !jobs.empty?
jobs.each do |job|
task = Schedule.find(job)
MessageWorker.perform_async(task.message_id, task.lists, task.user_id)
task.destroy
end
end
end
答案 0 :(得分:3)
虽然还有其他方法可以做到这一点,但cron看起来像:
* * * * * /usr/bin/curl "https://xxxxxxxxx.com/scheduled_messages"
。
其他一种方式可能是rufus-scheduler。
答案 1 :(得分:0)
看起来你正在使用Sidekiq。使用Sidetiq进行重复性任务。 https://github.com/tobiassvn/sidetiq