我目前正在开发一个ruby on rails项目。我需要系统根据数据库中的信息每12小时自动生成一次PDF。
目前我正在寻找用于生成PDF的prawn gem,但我想知道是否有办法让这个gem(或任何其他)每隔这么多小时生成PDF。
答案 0 :(得分:1)
如果您知道如何通过Ruby生成PDF(使用prawn
或wicked_pdf
),则只需要执行两个步骤:
创建一个rake任务,调用它,如下所示:
# lib/tasks/my_pdf_task.rake
desc "Generate pdf"
task :generate_pdf => :environment do
MyPdfGenerator.new.generate
end
使用whenever gem通过cron运行它。安装后&初始化gem,编辑config/schedule.rb
:
# config/schedule.rb
every 3.hours do
rake "generate_pdf"
end
答案 1 :(得分: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