【问题标题】:How to get params from controller into Sidekiq worker (rails)如何从控制器获取参数到 Sidekiq 工作者(rails)
【发布时间】:2020-08-21 12:48:53
【问题描述】:

我的应用中有某些操作,当它们发生时,邮件会被发送出去。

我的操作和邮件以及一切正常。但是,我正试图将这份工作交给一个 sidekiq 工作人员。

我在应用中的工作人员工作正常,但我在让我的邮件程序通过此工作人员工作时遇到问题。

这是我的工人

class SendMailerWorker
  include Sidekiq::Worker
  sidekiq_options retry: false

  def perform
    @candidate = Candidate.find(params[:id])
    @candidate.destroy
    TestMailer.send_request()
  end

end

这是我的控制器

  def destroy
    SendMailerWorker.perform_async
  end

但此设置不起作用,我收到以下错误:NameError: undefined local variable or method `params'

所以问题是,我如何访问 worker 中的参数?

【问题讨论】:

    标签: ruby-on-rails actionmailer sidekiq


    【解决方案1】:

    只需将您的参数从控制器传递给 sidekiq 工作人员

    class SendMailerWorker
      include Sidekiq::Worker
      sidekiq_options retry: false
    
      def perform(candidate_id)
        @candidate = Candidate.find(candidate_id)
        @candidate.destroy
        TestMailer.send_request()
      end
    end
    
      def destroy
        SendMailerWorker.perform_async(params[:id])
      end
    

    【讨论】:

    • SendMailerWorker.perform_async(params[:id]) 在创建控制器中不起作用有什么原因吗?即使我完全像这样设置它,也没有将 ID 传递给工作人员。
    • 默认情况下,rails create 操作在参数中没有 id。你能展示你的create 操作吗?
    • 感谢您的跟进,我已经弄明白了。
    猜你喜欢
    • 2013-09-04
    • 2014-03-01
    • 1970-01-01
    • 2014-04-14
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-08
    相关资源
    最近更新 更多