我目前正在一个红宝石轨道项目上工作。我需要系统根据来自数据库的信息每12小时自动生成一个PDF。在轨道上自动生成PDF的红宝石
目前我正在寻找大虾的宝石来生成PDF的,但我想知道是否有办法让这个宝石(或任何其他)产生的PDF每隔这么多小时。
我目前正在一个红宝石轨道项目上工作。我需要系统根据来自数据库的信息每12小时自动生成一个PDF。在轨道上自动生成PDF的红宝石
目前我正在寻找大虾的宝石来生成PDF的,但我想知道是否有办法让这个宝石(或任何其他)产生的PDF每隔这么多小时。
如果你知道如何(使用prawn
或wicked_pdf
)产生通过Ruby的PDF文件,只有2个步骤即可采取:
创建一个rake任务,调用它,就像这样:通过cron
# lib/tasks/my_pdf_task.rake
desc "Generate pdf"
task :generate_pdf => :environment do
MyPdfGenerator.new.generate
end
运行它,使用whenever宝石。安装&初始化宝石后,编辑config/schedule.rb
:
# config/schedule.rb
every 3.hours do
rake "generate_pdf"
end
参考这样可以在 - https://github.com/javan/whenever找到。 – David
这样的事情可以通过使用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
Rake任务
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
看看这个宝石https://github.com/javan/whenever使用cron作业产生PDF – sailor