ActiveRecord Connection: пользовательский инициализатор - PullRequest
2 голосов
/ 06 сентября 2011

Я хотел бы выполнять простую строку sql каждый раз, когда устанавливается новое соединение (для того же соединения)

Почему?Используя postgres, "set application_name = 'abc';"позволит мне отслеживать приложение, используя соединения, когда я запрашиваю у своего сервера базы данных статистику.

Не видел ничего, что позволило бы мне это сделать.

1 Ответ

1 голос
/ 06 сентября 2011

Недавно я решил похожую проблему.Я изменял уровень изоляции транзакции после подключения.Этот пример должен помочь вам.Он основан на совете в последнем примере этого сообщения в блоге.

# 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...