0

我目前正在开发一个 ruby​​ on rails 项目。我需要系统根据数据库中的信息每 12 小时自动生成一个 PDF。

目前我正在查看 prawn gem 来生成 PDF,但我想知道是否有办法让这个 gem(或任何其他)每隔这么多小时生成一次 PDF。

4

2 回答 2

1

如果您知道如何通过 Ruby(使用prawnwicked_pdf)生成 PDF,则只需执行 2 个步骤:

  1. 创建一个 rake 任务,调用它,如下所示:

    # lib/tasks/my_pdf_task.rake
    
    desc "Generate pdf"
    task :generate_pdf => :environment do
      MyPdfGenerator.new.generate
    end
    
  2. 通过 cron 运行它,无论何时使用gem。安装和初始化 gem 后,编辑config/schedule.rb

    # config/schedule.rb
    
    every 3.hours do
      rake "generate_pdf"
    end
    
于 2013-04-17T18:22:55.773 回答
0

这样的事情可以通过使用Wicked PDF来实现。根据我过去的理解和您的问题,您似乎想要生成某种包含pdf附件的电子邮件。如果我的立场正确,你的邮件中就会有这样的东西。

 def overtime_pdf(user, booking)
    @bookings = 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['bookings.pdf'] = WickedPdf.new.pdf_from_string(
            render_to_string(:pdf => 'overtime', :template =>
                'bookings/index.pdf.erb', :layouts => 'pdf.html')
        )
      end
    end
  end

如果您使用的是 heroku,则执行此操作后,您可以使用heroku-scheduler. 您要做的是创建一个接受用户参数的类方法,然后您可以在控制器操作中传递用户并在 rake 任务中使用它。所以你可以有这样的东西。

班级

 def self.send_overtime_mail(user, bookings)
    BookingMailer.booking_pdf(user, bookings).deliver
  end

耙任务

task :overtime_report => :environment do
  every 3.hours do
    user = User.where(:role => :administrator).first
    bookings = Bookings.where(:day => Date.today.beginning_of_month..Date.today.end_of_month)
    Booking.send_overtime_mail(user, bookings)
  end
end
于 2013-04-17T18:14:07.827 回答