Module: DB
- Includes:
- PactBroker::Logging
- Defined in:
- lib/db.rb
Class Method Summary collapse
- .configuration_for_env(env) ⇒ Object
-
.connect(db_credentials) ⇒ Object
Sequel by default does not test connections in its connection pool before handing them to a client.
- .connection_for_env(env) ⇒ Object
- .health_check ⇒ Object
- .mysql? ⇒ Boolean
Methods included from PactBroker::Logging
Class Method Details
.configuration_for_env(env) ⇒ Object
44 45 46 47 48 |
# File 'lib/db.rb', line 44 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 36 |
# File 'lib/db.rb', line 27 def self.connect db_credentials Sequel.datetime_class = DateTime # logger = Logger.new($stdout) 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
38 39 40 41 42 |
# File 'lib/db.rb', line 38 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_check ⇒ Object
56 57 58 59 60 |
# File 'lib/db.rb', line 56 def self.health_check PACT_BROKER_DB.synchronize do |c| c PACT_BROKER_DB.valid_connection? c end end |
.mysql? ⇒ Boolean
50 51 52 |
# File 'lib/db.rb', line 50 def self.mysql? PACT_BROKER_DB.adapter_scheme.to_s =~ /mysql/ end |