在Ruby的每個請求設置類變量,當我有一個像模型中的資源與寧靜的資源進行通信。 資源路徑有一些動態參數,所以我在每次請求之前在模型上設置一些類變量。如何避免競爭條件on Rails的
我有這樣的事情:
class MyClass << MySuperClass::Base
class << self
attr_accessor :site
attr_accessor :shop_id
attr_accessor :product_id
def get
RestClient.get(self.site)
end
def set_site(shop_id, product_id)
self.site = "http://example.com/api/shop/#{shop_id}/product/#{product_id}
end
end
end
在我的應用程序控制器I過濾器設置shop_id之前有和PRODUCT_ID
class ApplicationController < ActionController::Base
before_filter :set_site
private
def set_site
MyClass.set_site(current_shop.id, current_product.id)
end
end
當我從這裏瞭解:http://m.onkey.org/thread-safety-for-your-rails 這可能是一些競賽條件的原因。
那文章寫3年前所以它仍然是每個請求設置類變量可能導致競爭條件的情況下?
如果是這樣那麼什麼是實現類似的行爲,而不會導致競爭條件目前最好的做法?