Module: DB
Class Method Summary
collapse
included, #log_error, #log_with_tag
Class Method Details
.configuration_for_env(env) ⇒ Object
59
60
61
62
63
|
# File 'lib/db.rb', line 59
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.
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
# File 'lib/db.rb', line 28
def self.connect db_credentials
Sequel.datetime_class = DateTime
if ENV["DEBUG"] == "true" && ENV["PACT_BROKER_SQL_LOG_LEVEL"] != "none"
logger = Logger.new($stdout)
end
if db_credentials.fetch("adapter") == "sqlite"
FileUtils.mkdir_p(File.dirname(db_credentials.fetch("database")))
end
con = Sequel.connect(db_credentials.merge(:logger => logger, :pool_class => Sequel::ThreadedConnectionPool, :encoding => "utf8"))
con.extension(:connection_validator)
con.extension(:pagination)
con.extension(:statement_timeout)
con.extend_datasets do
def any?
!empty?
end
end
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
53
54
55
56
57
|
# File 'lib/db.rb', line 53
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
79
80
81
82
83
|
# File 'lib/db.rb', line 79
def self.health_check
PACT_BROKER_DB.synchronize do |c|
PACT_BROKER_DB.valid_connection? c
end
end
|
.mysql? ⇒ Boolean
69
70
71
|
# File 'lib/db.rb', line 69
def self.mysql?
!!(PACT_BROKER_DB.adapter_scheme.to_s =~ /mysql/)
end
|
.postgres? ⇒ Boolean
73
74
75
|
# File 'lib/db.rb', line 73
def self.postgres?
!!(PACT_BROKER_DB.adapter_scheme.to_s == "postgres")
end
|
.sqlite? ⇒ Boolean
65
66
67
|
# File 'lib/db.rb', line 65
def self.sqlite?
!!(PACT_BROKER_DB.adapter_scheme.to_s =~ /sqlite/)
end
|