Module: DB

Includes:
PactBroker::Logging
Defined in:
lib/db.rb

Class Method Summary collapse

Methods included from PactBroker::Logging

included, #log_error

Class Method Details

.configuration_for_env(env) ⇒ Object



43
44
45
46
47
# File 'lib/db.rb', line 43

def self.configuration_for_env env
  database_yml = PactBroker.project_root.join('config','database.yml')
  config = YAML.load(ERB.new(File.read(database_yml)).result)
  config.fetch(env).fetch(ENV.fetch('DATABASE_ADAPTER','default'))
end

.connect(db_credentials) ⇒ Object

Sequel by default does not test connections in its connection pool before handing them to a client. To enable connection testing you need to load the “connection_validator” extension like below. The connection validator extension is configurable, by default it only checks connections once per hour:

sequel.rubyforge.org/rdoc-plugins/files/lib/sequel/extensions/connection_validator_rb.html

Because most of our applications so far are accessed infrequently, there is very little overhead in checking each connection when it is requested. This takes care of stale connections.

A gotcha here is that it is not enough to enable the “connection_validator” extension, we also need to specify that we want to use the threaded connection pool, as noted in the documentation for the extension.



27
28
29
30
31
32
33
34
35
# File 'lib/db.rb', line 27

def self.connect db_credentials
  Sequel.datetime_class = DateTime
  con = Sequel.connect(db_credentials.merge(:logger => logger, :pool_class => Sequel::ThreadedConnectionPool, :encoding => 'utf8'))
  con.extension(:connection_validator)
  con.pool.connection_validation_timeout = -1 #Check the connection on every request
  con.timezone = :utc
  con.run("SET sql_mode='STRICT_TRANS_TABLES';") if db_credentials[:adapter].to_s =~ /mysql/
  con
end

.connection_for_env(env) ⇒ Object



37
38
39
40
41
# File 'lib/db.rb', line 37

def self.connection_for_env env
  config = configuration_for_env(env)
  logger.info "Connecting to #{env} #{config['adapter']} database #{config['database']}."
  connect config
end

.health_checkObject



55
56
57
58
59
# File 'lib/db.rb', line 55

def self.health_check
  PACT_BROKER_DB.synchronize do |c| c
    PACT_BROKER_DB.valid_connection? c
  end
end

.mysql?Boolean

Returns:

  • (Boolean)


49
50
51
# File 'lib/db.rb', line 49

def self.mysql?
  PACT_BROKER_DB.adapter_scheme.to_s =~ /mysql/
end