Ruby工作者随机使用NoMethodError失败

时间:2016-11-15 23:05:34

标签: ruby ruby-on-rails-4

我们使用Amazon PubSub在Rails服务之间进行消息传递,这在Heroku上与相关服务一起作为工作者运行。现在,代码正在轮询PubSub消息,并导致处理消息。我看到1-3%的错误率,当在三个不同的实例中访问模​​型的实例方法时,代码抛出NoMethodError。我会在这里展示一个。

首先是模型:

class Store < ActiveRecord::Base
  belongs_to :deal, touch: true
  belongs_to :retailer
  ...
end

然后是失败的代码:

def location_update(stores, new_locations)
  stores.each do |store|
    deal_id = store.deal ? store.deal.id.to_s : "(no deal exists)"
    ...
  end
end

错误是:

Nov 7 18:25:56 d.db858851-921e-4233-ae7c-8d3f8e03bca1 app [worker.1] undefined method&#39; deal&#39;对于#&lt;商店:0x007ffb78435000&GT;

store.deal失败了。显然,这是一个Store对象,并且在商店中存在交易,如模型和小数失败率所示(97-99%成功并且都执行此代码)。

表现得好像没有加载Store类。代码是否需要执行某些操作以确保加载类?如果是这样,为什么它只会在1-3%的时间内失败?

(Ruby 2.3.1,Rails 4.2.7)

0 个答案:

没有答案