繁体   English   中英

在Rails上自动生成红宝石中的PDF

[英]Automatically generating PDF's in ruby on rails

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

目前,我正在查看虾宝石以生成PDF,但是我想知道是否有一种方法可以使这种宝石(或其他任何宝石)每隔几个小时产生一次PDF。

如果您知道如何通过Ruby(使用prawnwicked_pdf )生成PDF,则只剩下两个步骤:

  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 

这样的事情可以通过使用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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM