ruby加载文件异步?

时间:2011-06-10 20:14:56

标签: ruby-on-rails ruby asynchronous load

我有一些奇怪的问题(对于一个非常奇怪的用例,我会解释)。我正在使用postgres模式设置多租户应用程序以实现数据多租户。

我系统中的每个company都会获得自己的架构。我完成此操作的方法是在模型上使用after_commit,在创建时,然后创建一个新的postgres模式,并将schema.rb加载到其中。 (使用ruby rake db:schema:loadload代码复制)。

您可以看到gem 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_table来自schema.rb本身。

正如您所看到的,第二次create: database似乎是在我从第一次创建公司时加载schema.rb时发生的。

有人知道load是否异步?我知道红宝石没有真正的线程,但它可能是使用纤维或其他东西?这真让我烦恼,因为当我的测试出现时,想要创建的postgres架构似乎不存在。

Rails 3.0.8
Ruby 1.9.2

2 个答案:

答案 0 :(得分:0)

我不是100%确定这是你的问题因为我确定require会发生什么,而不是load会发生什么事情,这种情况发生在我身上,因为需要不是原子的,所以加载带有require的文件中的代码会导致竞争条件。也许这就是正在发生的负载,但我无法找到任何有关负载的信息是否原子。

答案 1 :(得分:0)

nevermind ...问题与load无关在导入wrong schema

时我已经与schema.rb相关联

实际上有一个被抛出的异常被隐藏在某个地方