Rails:Singleton的状态在请求之间持续存在

时间:2014-01-11 20:24:59

标签: ruby-on-rails multithreading singleton

我正在研究Rails中的多租户应用程序。因为每个请求多次访问租户的数据(通过ApplicationInstance模型访问),所以我决定在一个单例中使用如下所示的方法在请求期间缓存它:

  def application_instance
    @current_application_instance ||= ApplicationInstance.find_by :subdomain => subdomain

    raise TenantError unless @current_application_instance

    puts "Current Tenant: #{@current_application_instance.subdomain}"
    @current_application_instance
  end

然后在几个模型的范围内使用它:

default_scope -> { where(:application_instance_id => application_instance.id) }

如果我在一个租户(test.myapp.dev)上向系统发出请求,它会正确地将“Current Tenant:test”放入控制台。但是,如果我向(admin.myapp.dev)发出请求,它仍然会向控制台输出“Current Tenant:test”。不知何故,这个单身人士的状态在请求之间持续存在。

几个问题:

1)如何防止单身人士的状态在请求之间保持不变?

2)这是一场等待在多线程环境中发生的灾难吗?

更新

我现在的解决方法是在每个请求的开头设置@current_application_instance并在线程安全模式下运行rails。这种方式@current_application_instance在请求开始时是正确的,并且在请求过程中不会更改(线程安全模式)。这是一个可行的解决方法吗?在线程安全模式下运行会损害可伸缩性吗?

0 个答案:

没有答案