【问题标题】:Calling methods in ActiveJob performActiveJob 中的调用方法执行
【发布时间】:2017-05-03 16:37:17
【问题描述】:

我在打电话给我的工作时收到No Method Error。我不知道为什么。这是实际的错误:

NoMethodError: undefined method `get_customers' for #
<GetCustomersJob:0x007f15280e4270>

我正在学习ActiveJob,并创建了我的第一份超级简单的工作,并调用了在我的Shop 模型上定义的方法。工作如下所示:

class GetCustomersJob < ActiveJob::Base
  queue_as :default

  def perform(current_shop)
    current_shop.get_customers.perform
  end
end

get_customers 在我的商店模型上定义得很好,current_shop 是一个Shop 模型对象。 get_customers 在这份工作之外按预期工作。我似乎无法让它在这份工作中发挥作用。

我也试过了:

Shop.current_shop.get_customers.perform

我做错了什么?

【问题讨论】:

    标签: ruby rails-activejob


    【解决方案1】:

    我忘记在末尾用Test 命名测试类,所以没有定义perform_now

    (为未来的我写这个:wave :)

    【讨论】:

    • :facepalm: 我也做了,谢谢!
    【解决方案2】:

    首先,更改perform 方法 - 在那里您只想执行某些操作,在您的情况下,您想在current_shop 对象上调用get_customers。那就这样做吧。

    class GetCustomersJob < ActiveJob::Base
      queue_as :default
    
      def perform(current_shop)
        current_shop.get_customers # removed .perform
      end
    end
    

    稍后,您想调用该作业。为此,您需要编写作业的类名并使用perform_now 来立即运行作业:

    GetCustomersJob.perform_now(Shop.current_shop)
    

    perform_later 将作业排队以备后用:

    GetCustomersJob.perform_later(Shop.current_shop)
    

    【讨论】:

    • 是的,仍然得到完全相同的错误。我更新了 OP,但它的说法 get_customers 没有在 job 上定义。没错,它在模型上定义。然后我传入一个Shop 对象来处理.. 因此我很困惑
    • @ToddT 我很好奇你是否找到了错误的原因?
    • 结果是我的代码很好,我没有重新启动 Sidekiq,所以我更改的代码没有被拾取.. 吸取了教训!感谢您的帮助
    • @ToddT 没错,sidekiq 需要在代码更改时重新启动。
    • @ToddT 虽然我怀疑这个current_shop.get_customers.perform 是否正确......(我说它是错误的)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    • 2015-03-07
    • 2018-08-26
    • 2015-06-18
    • 2011-01-30
    • 1970-01-01
    相关资源
    最近更新 更多