Postgresql的架构和后台作业

时间:2012-08-20 05:42:19

标签: ruby-on-rails-3 postgresql activerecord nginx passenger

我在Phusion Passenger,Nginx和Postgres 9.1.4上运行Rails 3.2应用程序。我已按照Postgresql's schemas中描述的方法将我的多租户应用移至this post(正在开发中):

由于这种方法似乎为每个请求全局设置了架构搜索路径(通过handle_subdomain,见下文),这对后台作业(via Resque)有何影响?

class ApplicationController < ActionController::Base
  before_filter :handle_subdomain

  def handle_subdomain
    if @tenant = Tenant.find_by_subdomain(request.subdomain)
      PgTools.set_search_path @tenant.id
    else
      PgTools.restore_default_search_path
    end
  end
end

如果我在Resque后台作业中设置搜索路径会花费相当多的时间(例如,删除S3上托管的一堆Paperclip图像)会发生什么?这可能会干扰对应用程序的请求,该应用程序在handle_subdomain中设置路径吗?

我应该修补ActiveRecord硬编码模式搜索路径吗?例如。 select * from“1”。“users”(“1”是架构路径)

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

如果ActiveRecord只是发出“SET search_path = x”命令,那么就是设置每个会话的值,所以你应该没事。

事实上,如果你在显式事务中设置它,它将在事务结束时回滚,如果事务被回滚*。

  • 澄清了以下来自araqnid的评论