ActiveRecord Connection:自定义初始化程序

时间:2011-09-06 18:16:33

标签: ruby-on-rails activerecord

我想在每次建立新连接时(在同一个连接上)执行一个简单的SQL行

为什么呢? 使用postgres,“set application_name ='abc';”当我向数据库服务器查询统计信息时,将允许我使用连接跟踪应用程序。

没有看到任何可以让我这样做的事情。

1 个答案:

答案 0 :(得分:1)

我最近解决了类似的问题。连接后我正在更改事务隔离级别。这个例子可以帮到你。它基于建议in the final example on this blog post.

# lib/active_record/application_name.rb
module ActiveRecord
  module ApplicationName
    def self.included(base)
      unless base.respond_to? :establish_connection_with_application_name
          base.extend ClassMethods
          base.class_eval do
            class << self
              alias_method_chain :establish_connection, :application_name
            end
          end
      end
    end

    module ClassMethods
      def establish_connection_with_application_name(*args)
        result = establish_connection_without_application_name(*args)
        ::ActiveRecord::Base.connection.execute("set application_name = 'abc';")
        result
      end
    end
  end
end

# lib/patches/active_record.rb
require 'active_record/application_name'

class ActiveRecord::Base
  include ActiveRecord::ApplicationName
end


# config/initializers/patches.rb
require 'patches/active_record'