ruby-on-rails - 如何在 Heroku 上安排选定日期的工作?

标签 ruby-on-rails heroku scheduled-tasks

我在 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 

最佳答案

简单的东西,比如;

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

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

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

关于ruby-on-rails - 如何在 Heroku 上安排选定日期的工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15623734/

相关文章:

batch-file - 批处理手动运行,但不在计划任务中

javascript - RAILS 不渲染 js.erb

python - 在 Heroku 上部署 Python(2.7)/Django(1.5) 应用程序时出现数据库完整性错误

java - 无法插入新创建的 mongolab 数据库

c# - 自定义任务计划程序按日期时间启动任务

Android - 使用 Timer 和 TimerTask 控制任务?

ruby-on-rails - RubyMine 和 TextMate 的优缺点

ruby-on-rails - Heroku 上的 "PG::Error - numeric field overflow"

ruby-on-rails - 分析和跟踪下载

ruby-on-rails - 在 Heroku/Ruby on Rails 上找不到 PNG