2011-06-10 200 views
0

我有一些奇怪的問題正在進行(對於一個非常奇怪的用例,我會解釋一下)。我正在使用postgres模式設置多租戶應用程序以實現數據多租戶。ruby​​加載文件異步?

我係統中的每個company都會得到自己的模式。我完成此工作的方式是在模型上創建一個after_commit,然後創建一個新的postgres架構,並將schema.rb加載到該模型中。 (複製自rake db:schema:load代碼)使用ruby load

你可以看到寶石here

無論如何,這一切工作(控制檯)。創建一個公司創建新的模式,我可以切換到它等等...我的問題在於我的集成測試。我有一個像這樣創建的公司一個RSpec測試:

before do 
    @c1 = Factory :company 
    @c2 = Factory :company 
end 

有什麼奇怪的是,我開始變得對DB模式裝載日誌,但他們被截斷。就好像它們並行發生一樣。下面是一個示例輸出:

>> create: database: unique_name1 
-- create_table("first_table_in_schema_rb", {:force=>true}) 
>> create: database: unique_name2 

create: database是我的日誌行中,-- create_tableschema.rb本身。

正如您所看到的,第二個create: database似乎發生在我從第一家公司創建時加載schema.rb時發生。

有誰知道load是不是異步?我知道紅寶石沒有真正的線程,但它可以使用光纖或什麼?這真讓我感到困惑,因爲當我的測試出現時,本來意圖創建的postgres模式似乎並不存在。

的Rails 3.0.8
的Ruby 1.9.2

回答

0

我不是100%肯定這是你的問題,因爲我肯定什麼用require但與load發生,這事與要求,因爲發生在我身上一次require不是原子的,因此從require文件加載代碼將導致競爭條件。也許這就是負載的情況,但我無法找到任何有關負載的信息是否是原子的。

0

沒關係......問題已經無關load這是導入schema.rb

有實際上拋出一個異常悄悄抓的地方

當我已經連接到 wrong schema事實