【问题标题】:Automatically generating PDF's in ruby on rails在 ruby​​ on rails 中自动生成 PDF
【发布时间】:2013-04-17 16:05:40
【问题描述】:

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

目前我正在查看 prawn gem 来生成 PDF,但我想知道是否有办法让这个 gem(或任何其他)每隔这么多小时生成一次 PDF。

【问题讨论】:

标签: ruby-on-rails ruby pdf


【解决方案1】:

如果您知道如何通过 Ruby 生成 PDF(使用 prawnwicked_pdf),则只需执行 2 个步骤:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-07
      • 2012-12-27
      相关资源
      最近更新 更多