2011-06-10 139 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事实