class DnsOne::Backend::DB
Public Class Methods
new(conf)
click to toggle source
# File lib/dns_one/backend/db.rb, line 3 def initialize conf @query = conf.delete :query @conf = conf setup_db end
Public Instance Methods
find(dom_name)
click to toggle source
# File lib/dns_one/backend/db.rb, line 9 def find dom_name query build_query(dom_name) end
preload_dummy?()
click to toggle source
Find a dummy zone to make AR/pg load all dependencies
# File lib/dns_one/backend/db.rb, line 14 def preload_dummy? true end
Private Instance Methods
build_query(dom_name)
click to toggle source
# File lib/dns_one/backend/db.rb, line 41 def build_query dom_name @query.sub "'$domain'", ActiveRecord::Base.connection.quote(dom_name) end
query(sql, tries = 1)
click to toggle source
# File lib/dns_one/backend/db.rb, line 20 def query sql, tries = 1 return if tries > 3 # http://jakeyesbeck.com/2016/02/14/ruby-threads-and-active-record-connections/ res = ActiveRecord::Base.connection_pool.with_connection do ActiveRecord::Base.connection.execute sql end first_record = res&.first record_values = first_record&.values record_values&.first rescue ActiveRecord::StatementInvalid => e Global.logger.error "SQL query error. Trying to reconnect #{tries}. Details:\n#{e.desc}" # http://geoff.evason.name/2015/01/18/postgres-ssl-connection-has-been-closed-unexpectedly ActiveRecord::Base.connection.reconnect! find sql, (tries+1) rescue => e Global.logger.error "SQL query error. Details:\n#{e.desc}" end
require_deps()
click to toggle source
# File lib/dns_one/backend/db.rb, line 52 def require_deps gem_name = { 'postgresql' => 'pg', 'mysql' => 'mysql', 'mysql2' => 'mysql2' }[ @conf[:adapter] ] unless gem_name Util.die "Database adapter '#{@conf[:adapter]}' not supported. Aborting." end ['active_record', gem_name].each do |req_name| begin require req_name rescue StandardError, LoadError => e Util.die "Error on 'require #{req_name}', install with 'gem install #{req_name}'.\nError Details: #{e.desc}" end end end
setup_db()
click to toggle source
# File lib/dns_one/backend/db.rb, line 46 def setup_db require_deps ActiveRecord::Base.logger = Global.logger ActiveRecord::Base.establish_connection @conf end