Module: DB
Class Method Summary
collapse
included, #log_error, #log_with_tag
Class Method Details
.configuration_for_env(env) ⇒ Object
54
55
56
57
58
|
# File 'lib/db.rb', line 54
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
|
# 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.extension(:any_not_empty)
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
48
49
50
51
52
|
# File 'lib/db.rb', line 48
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
74
75
76
77
78
|
# File 'lib/db.rb', line 74
def self.health_check
PACT_BROKER_DB.synchronize do |c|
PACT_BROKER_DB.valid_connection? c
end
end
|
.mysql? ⇒ Boolean
64
65
66
|
# File 'lib/db.rb', line 64
def self.mysql?
!!(PACT_BROKER_DB.adapter_scheme.to_s =~ /mysql/)
end
|
.postgres? ⇒ Boolean
68
69
70
|
# File 'lib/db.rb', line 68
def self.postgres?
!!(PACT_BROKER_DB.adapter_scheme.to_s =~ /postgres/)
end
|
.sqlite? ⇒ Boolean
60
61
62
|
# File 'lib/db.rb', line 60
def self.sqlite?
!!(PACT_BROKER_DB.adapter_scheme.to_s =~ /sqlite/)
end
|