[英]Automatically generating PDF's in ruby on rails
我目前正在研究ruby on rails项目。 我需要系统根据数据库中的信息每12小时自动生成一次PDF。
目前,我正在查看虾宝石以生成PDF,但是我想知道是否有一种方法可以使这种宝石(或其他任何宝石)每隔几个小时产生一次PDF。
如果您知道如何通过Ruby(使用prawn
或wicked_pdf
)生成PDF,则只剩下两个步骤:
创建一个rake任务,如下调用:
# lib/tasks/my_pdf_task.rake desc "Generate pdf" task :generate_pdf => :environment do MyPdfGenerator.new.generate end
通过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.