나는 최근에 비슷한 문제를 해결했다. 연결 후 트랜잭션 격리 수준을 변경했습니다. 이 예제가 도움이 될 것입니다. 조언을 기반으로합니다. 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'
이것은 작동하지 않지만 아이디어가있었습니다. Activerecord는 establish_connection을 통해 internaly를 전달하지 않습니다. 대신 풀을 사용합니다. ActiveRecord :: ConnectionAdapters :: ConnectionPool의 new_connection 메서드를 방문하여 코드를 추가했습니다. 잘 했어. 시간을 찾으면 좋은 코드를 보석으로 공개 할 것입니다. – Thierry
아, 멋지다. 필자의 환경에서는 유니콘의 post_fork 블록에서 establish_connection을 명시 적으로 호출하기 때문에 나에게 도움이되었다. 그래도 조언 주셔서 감사합니다. –