Как трябва да използвам sidekiq works?

Имам приложение, в което мога да създам фактура, да я направя в pdf и да я изпратя на клиента. Имам две действия в пощата си:

class InvoiceMailer < ActionMailer::Base
  default from: "[email protected]"

  def send_invoice_reminder(invoice)
    @invoice = invoice
    attach_invoice
    mail :subject => "Invoice reminder", :to => invoice.customer.email
  end

  def send_invoice(invoice)
    @invoice = invoice
    attach_invoice
    mail :subject => "Your Invoice", :to => invoice.customer.email
  end

  protected
  def attach_invoice
    attachments["invoice.pdf"] = WickedPdf.new.pdf_from_string(
      render_to_string(:pdf => "invoice",:template => 'admin/invoices/show.pdf.erb')
    )
  end
end

Сега искам да изпратя това чрез работниците на Sidkiq. Но имам въпрос. Дали имам нужда от двама sidekiq работници:

  • един за изпращане на имейл с фактура

  • второ за изпращане на напомняне

или може би един работник ще бъде достатъчен?


person Mateusz Urbański    schedule 25.08.2014    source източник


Отговори (1)


Мисля, че можете да използвате един работник за това, защото имате предимно една и съща работа за тези две задачи

и може да изглежда така:

class InvoiceMailer < ActionMailer::Base
  default from: "[email protected]"

  def send_invoice(invoice, subject)
    @invoice = invoice
    attachments["invoice.pdf"] = pdf
    mail subject: subject, to: invoice.customer.email
  end

  private

  def pdf
    WickedPdf.new.pdf_from_string render_to_string(
        pdf: "invoice",
        template: 'admin/invoices/show.pdf.erb'
    )
  end
end

class InvoceEmailSender
  include Sidekiq::Worker

  def perform(invoice, subject)
    InvoiceMailer.send_invoice(invoice, subject).deliver
  end
end

InvoiceEmailSender.perform_async invoice, 'Your Invoice'
InvoiceEmailSender.perform_async invoice, 'Invoice Reminder'
person Igor Guzak    schedule 25.08.2014