使用ActiveJob,perform_now似乎与perform_later有不同的结果

时间:2017-06-13 21:06:56

标签: ruby-on-rails sidekiq ruby-on-rails-4.2 rails-activejob

我正在ActiveJob使用SideKiq,并且使用下面的代码,使用perform_later而不是perform_now时会得到不同的结果。

使用perform_now时,我的代码会创建指定的文件夹和文件。 使用perform_later时,我可以看到代码执行但不会被抛入Sidekiq的重试队列,但不会创建文件夹或文件。

如果我还有其他任何可以解决问题的方法,请告诉我,因为我可能只是忽略了它。

应用/控制器/关切/ pdf_player_reports.rb

module PdfPlayerReports
  extend ActiveSupport::Concern

  included do
    # before_action :set_player
    # before_action :set_user_report
  end

  def director_report_pdf

    @players = Player.where(id: params["id"])

    html = render_to_string template: "players/director_summary_report.pdf.erb"
    CreatePdfJob.perform_later(html)

    #CreatePdfJob.perform_now(html)

  end

end

应用/作业/ create_pdf_job.rb

class CreatePdfJob < ActiveJob::Base
  queue_as :high_priority

  def perform(*args)
    generate_pdf_from_string(args.first)
  end

  def generate_pdf_from_string(html)

    # create pdf from passed in HTML string
    pdf = WickedPdf.new.pdf_from_string(html)

    # Create the directory for the pdfs that will be gernereated incases where it doesn't already exist
    pdf_directory_path = Rails.root.join('public','uploads','pdfs')
    unless File.directory? pdf_directory_path
      FileUtils.mkdir_p(pdf_directory_path)
    end

    # Open the specified file and then write the contents to disk
    File.open(pdf_directory_path.join('output.pdf'),'wb') do |f|
      f << pdf
    end

  end

end

1 个答案:

答案 0 :(得分:1)

问题(根据我的理解)似乎是我需要取消我的sidekiq进程并在我更改作业文件上的代码时重新启动它(sidekiq -C config/sidekiq.yml