我们使用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)