3

我的Rails 3.1應用程序使用引擎,我想知道是否對此引擎的訪問是線程安全的。Rails引擎線程安全 - ActiveResource

我已經/lib/mymodule.rb發動機,它看起來是這樣的:

module MyModule 
    def self.my_method() 
    begin 
     data = WebResource.find(:all) # Where WebResource < ActiveResource::Base 
    rescue 
     data = nil 
    end 

    return data 
    end 
end 

然後在我的意見/控制器,我稱這種方法是這樣的:

MyModule::WebResource.headers[:some_id] = cookies[:some_id] 
MyModule::my_method() 

在我的主應用程序中,我有線程安全!配置選項集。我知道用threadsafe!啓用時,每個控制器都存在於它自己的線程中,用於每個請求。

但是,此模塊線程安全嗎?我懷疑對於所有請求只有這個模塊的一個副本,所以它不是本質上是線程安全的,並且需要使用類似Mutex的手動同步。具體來說,我有代碼設置ActiveResource類WebResource之外的HTTP請求標題。這是否會導致線程問題?

回答

3

這取決於你在這個方法裏面做了什麼,以確定它是否是線程安全的。如果它不涉及類變量,那麼它是線程安全的。

如果它在類級別存儲或設置信息,並假定在再次使用該信息之前沒有其他方法會觸及該信息,則它不是線程安全的。

+0

謝謝@Jesse。我已更新我的問題以提供更多詳細信息。雖然我沒有觸及任何類變量/全局狀態,但我仍然不確定這是否會起作用。我在我的控制器中設置引擎之外的HTTP頭信息。你知道每個Rails請求會得到它自己的Engine/WebResource.headers實例嗎? – Oleksi

+0

在Ruby/Rails中如何實現MyModule :: WebResource.headers?它在課堂上嗎? – Oleksi

+0

什麼是WebResource?是不是你定義的activerecord類? –