Rails - Rufus cron事件A每天运行但事件B不运行

时间:2015-04-23 20:51:19

标签: ruby-on-rails ruby-on-rails-4 rufus-scheduler

require_relative '../../bin/generate_survey'
require_relative '../../bin/generate_stats_emails'
email_config = YAML.load_file("#{Rails.root}/config/email_config.yml")

def rufus_logger
  @@rufus_logger ||= Logger.new("#{Rails.root}/log/rufus.log")
end

survey_scheduler = Rufus::Scheduler.new
rufus_logger.info('Initializing Survey Rufus Scheduler')

#Job A
survey_scheduler.cron '00 08 * * 1-5' do
  conference_today = read_ics_make_quiz(Date.today)
  rufus_logger.info("Survey scheduling for #{Date.today} returns #{conference_today}")
end

#Job B
survey_scheduler.cron '00 23 * * 1-5' do
  rufus_logger.info("Stats Emails starting")
  survey_settings = Survey.where ['unlock_at BETWEEN ? AND ?', DateTime.now.beginning_of_day, DateTime.now.end_of_day] unless @survey_settings[0]
  if survey_settings.present?
    get_latest_stats(email_config)
    UserMailer.presenter_stats_email(email_config[:action_mailer][:education_email_group]).deliver_now
    UserMailer.resident_stats_email(email_config[:action_mailer][:resident_email_group]).deliver_now
    rufus_logger.info("Stats Emails sent")
  else
    rufus_logger.info("Stats Emails not sent")
  end
end

详细说明: 服务器:Ubuntu 12.04 阿帕奇/ MySQL的/乘客 Ruby 2.1.5 Rails 4.2.0

每次,工作A运行得非常好。 工作B永远不会执行。它永远不会在日志中留下任何东西。

Rufus.log有: 初始化调查Rufus调度程序 其次是每日行: #{Date.today}的调查安排返回#{conference_today}

它永远不会达到工作B的评论

感谢任何帮助

2 个答案:

答案 0 :(得分:1)

您的“拆分为两个文件”移动很有意思,但您最好将其限定为“拆分为两个文件和两个调度程序实例”。我很高兴你能以某种方式工作。

我想知道你的工作是否已经安排在你的第一个“单个文件”版本中。像

这样的东西
p survey_scheduler.jobs.length

会告诉我们的。但我认为它会告诉2并且问题出在其他地方,这使我进入了我的“答案”的第二部分。

感谢您通过指定使用Passenger来添加一条非常缺少的信息。

Passenger vs rufus-scheduler是一个经典之作。通常的症状是“它没有安排”或“它不会在一段时间后安排”。我怀疑你是这个变种的受害者。在你非常仔细地报告发生了什么之前,不能告诉你。

我建议您阅读rufus-scheduler README FAQ中的最后一个链接,它们包含有关这些问题的信息(和解决方案)。查看您正在使用的乘客版本的手册将是很好的。了解你的工具。

last link更多的是关于Unicorn,但它暗示了Passenger的解决方案。

答案 1 :(得分:0)

我将它们分成2个文件,现在可以正常工作。

scheduled_jobs.rb

require 'rufus-scheduler'
require_relative '../../bin/generate_survey'

def rufus_logger
  @@rufus_logger ||= Logger.new("#{Rails.root}/log/rufus.log")
end

survey_scheduler = Rufus::Scheduler.new
rufus_logger.info('Initializing Survey Rufus Scheduler')

survey_scheduler.cron '00 08 * * 1-5' do
  OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
  conference_today = read_ics_make_quiz(Date.today)
  rufus_logger.info("Survey scheduling for #{Date.today} returns #{conference_today}")
end

scheduled_email.rb

require 'rufus-scheduler'
require_relative '../../bin/generate_stats_emails'
email_config = YAML.load_file("#{Rails.root}/config/email_config.yml")

def rufus_logger
  @@rufus_logger ||= Logger.new("#{Rails.root}/log/rufus.log")
end

email_scheduler = Rufus::Scheduler.new
rufus_logger.info('Initializing Email Rufus Scheduler')

email_scheduler.cron '00 23 * * 1-5' do
  rufus_logger.info("Stats Emails starting")
  get_latest_stats(email_config)
  UserMailer.presenter_stats_email(email_config[:action_mailer][:education_email_group]).deliver_now
  UserMailer.resident_stats_email(email_config[:action_mailer][:resident_email_group]).deliver_now
  rufus_logger.info("Stats Emails sent")
end