2013-04-17 46 views
0

我目前正在一个红宝石轨道项目上工作。我需要系统根据来自数据库的信息每12小时自动生成一个PDF。在轨道上自动生成PDF的红宝石

目前我正在寻找大虾的宝石来生成PDF的,但我想知道是否有办法让这个宝石(或任何其他)产生的PDF每隔这么多小时。

+0

看看这个宝石https://github.com/javan/whenever使用cron作业产生PDF – sailor

回答

1

如果你知道如何(使用prawnwicked_pdf)产生通过Ruby的PDF文件,只有2个步骤即可采取:

  1. 创建一个rake任务,调用它,就像这样:通过cron

    # lib/tasks/my_pdf_task.rake 
    
    desc "Generate pdf" 
    task :generate_pdf => :environment do 
        MyPdfGenerator.new.generate 
    end 
    
  2. 运行它,使用whenever宝石。安装&初始化宝石后,编辑config/schedule.rb

    # config/schedule.rb 
    
    every 3.hours do 
        rake "generate_pdf" 
    end 
    
+0

参考这样可以在 - https://github.com/javan/whenever找到。 – David

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 

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