Ruby on rails 如何在Heroku上为选定的一天安排作业?
我在Heroku上部署了一个带有Heroku调度程序插件的Rails应用程序,并遵循以下链接:。我试图做的是将以下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"
索引设置为每月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必须不兼容?