【问题标题】:How can I schedule a job on Heroku for a selected day day?如何在 Heroku 上为选定的一天安排工作?
【发布时间】:2013-03-15 11:04:11
【问题描述】:

我在 Heroku 上部署了一个带有 Heroku 调度程序插件的 Rails 应用程序,并点击以下链接:Heroku Scheduler。我正在尝试做的是将index 设置为在每个月的 18 日运行。我的index 方法如下所示:

def index 
    @hospital_bookings = HospitalBooking.scoped
    hospital_booking = @hospital_bookings
    @user = current_user

    if params[:format] == "pdf"
      @hospital_bookings = @hospital_bookings.where(:day => Date.today.beginning_of_month..Date.today.end_of_month)
    end

    respond_to do |format|
      format.html
      format.pdf do
        render :pdf => "#{Date.today.strftime("%B")} Overtime Report",
               :header => {:html => {:template => 'layouts/pdf.html.erb'}}
        OvertimeMailer.overtime_pdf(@user, hospital_booking).deliver
      end
    end
  end

因此,当 rake 任务在每个月的 18 日运行时,这将触发我的 OvertimeMailer 并向用户发送电子邮件。我目前在我的scheduler.rake

task :overtime_report => :environment do
  if Date.today.??? # Date.today.wday == 5
  HospitalBooking.index
  end
end

我知道上面的 rake 任务是错误的。但我试图在这些方面取得一些成就

更新

class OvertimeMailer < ActionMailer::Base

  default :from => DEFAULT_FROM

 def overtime_pdf(user, hospital_booking)
  @hospital_bookings = hospital_booking
  @user = user
  mail(:subject => "Overtime", :to => user.email) do |format|
    format.text # renders overtime_pdf.text.erb for body of email
    format.pdf do
      attachments["hospital_bookings.pdf"] = WickedPdf.new.pdf_from_string(
        render_to_string(:pdf => "overtime",:template => 'hospital_bookings/index.pdf.erb', :layouts => "pdf.html")
      )
    end
  end
end
end 

【问题讨论】:

    标签: ruby-on-rails heroku scheduled-tasks


    【解决方案1】:

    一些简单的东西;

    task :overtime_report => :environment do
      if Date.today.day == 18
        HospitalBooking.index
      end
    end
    

    然后每天运行您的调度程序。

    但是你不想像这样从你的 rake 任务中调用你的控制器索引方法。 HospitalBooking 将是模型,而不是您期望的控制器。您最好的选择是将您的电子邮件/生成 PDF 作为模型中的可调用方法,然后从您的任务中调用它。

    【讨论】:

    • 我已经更新了我的问题。但据我了解,您建议将我的 def overtime 方法的内容放入 HospitalBooking 模型中,然后使这个可调用正确?会投票但没有足够的代表
    • 仅出于测试目的而按照您的答案进行测试时,似乎当我运行以下命令 heroku run rake overtime_report 时出现以下错误:undefined method day=' for Mon, 25 Mar 2013:Date` I明白 .day 不能兼容吗?
    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多