使用 ActiveJob,perform_now 的结果似乎与 perform_later 不同
Using ActiveJob, perform_now seems to have different results than perform_later
我将 ActiveJob
与 SideKiq
结合使用,使用下面的代码,当我使用 perform_later
与 perform_now
时得到不同的结果。
使用 perform_now
时,我的代码会创建指定的文件夹和文件。
使用 perform_later
时,我可以看到代码执行但没有被扔进 Sidekiq 的重试队列,但没有创建文件夹或文件。
如果我还有什么可以帮助解决问题的,请告诉我,因为我可能刚刚忽略了它。
app/controllers/concerns/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
app/jobs/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
问题(据我所知)似乎是我需要取消我的 sidekiq 进程并在我更改作业文件中的代码时重新启动它 (sidekiq -C config/sidekiq.yml
)。
我将 ActiveJob
与 SideKiq
结合使用,使用下面的代码,当我使用 perform_later
与 perform_now
时得到不同的结果。
使用 perform_now
时,我的代码会创建指定的文件夹和文件。
使用 perform_later
时,我可以看到代码执行但没有被扔进 Sidekiq 的重试队列,但没有创建文件夹或文件。
如果我还有什么可以帮助解决问题的,请告诉我,因为我可能刚刚忽略了它。
app/controllers/concerns/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
app/jobs/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
问题(据我所知)似乎是我需要取消我的 sidekiq 进程并在我更改作业文件中的代码时重新启动它 (sidekiq -C config/sidekiq.yml
)。