Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Heroku上为选定的一天安排作业?_Ruby On Rails_Heroku_Scheduled Tasks - Fatal编程技术网

Ruby on rails 如何在Heroku上为选定的一天安排作业?

Ruby on rails 如何在Heroku上为选定的一天安排作业?,ruby-on-rails,heroku,scheduled-tasks,Ruby On Rails,Heroku,Scheduled Tasks,我在Heroku上部署了一个带有Heroku调度程序插件的Rails应用程序,并遵循以下链接:。我试图做的是将以下索引设置为每月18日运行。我的index方法如下所示: def index @hospital_bookings = HospitalBooking.scoped hospital_booking = @hospital_bookings @user = current_user if params[:format] == "pdf"

我在Heroku上部署了一个带有Heroku调度程序插件的Rails应用程序,并遵循以下链接:。我试图做的是将以下
索引设置为每月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并向用户发送电子邮件。我当前在我的
计划程序中有

task :overtime_report => :environment do
  if Date.today.??? # Date.today.wday == 5
  HospitalBooking.index
  end
end
我知道上面的任务是错误的。但我正试图在这方面有所成就

更新

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 
class OvertimeMailerdefault\u from
def加班费pdf(用户、医院预订)
@医院预订=医院预订
@用户=用户
邮件(:subject=>加班时间,:to=>user.email)执行|格式|
format.text#呈现电子邮件正文的pdf.text.erb
format.pdf do
附件[“hospital_bookings.pdf”]=WickedPdf.new.pdf_from_string(
呈现到字符串(:pdf=>“加班时间”,:template=>“hospital\u bookings/index.pdf.erb”,:layouts=>“pdf.html”)
)
结束
结束
结束
结束
一些简单的东西,比如

task :overtime_report => :environment do
  if Date.today.day == 18
    HospitalBooking.index
  end
end
然后每天运行调度程序


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

我已更新了我的问题。但据我所知,您建议采用我的
def加班
方法的内容,并将其放入HospitalBooking模型中,然后使此调用正确?仅出于测试目的,我会向上投票,但您的答案没有足够的重复。当我运行以下命令时,似乎出现了以下错误:
undefined method
day='对于2013年3月25日星期一:Date`我理解。day必须不兼容?