ebisu_connection 2.4.2 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6baf52851e9f37b4ceb898cba5d4bb1fca881d11027a979657e18125441a3a5d
4
- data.tar.gz: 1c9da59f932336842dd3816269a108b6a2414de9405aa8dd9f9f6ca4e79f1a93
3
+ metadata.gz: 1492ff4f579ef693566907ad31141dea9207cedc046502ccc6a3ee6b17ba4a56
4
+ data.tar.gz: 3d96c7e13ca8452787270f25c91a1c97d75f7defe4ca0d5a4d1fa7d477bf48ea
5
5
  SHA512:
6
- metadata.gz: 27e307f0414f50c082c0fabc82f8e634f58a2343a19e8a1ea099ccbe0b8f1c1c3aa83c769b6f46c272721ae7604b27db4c37f3b0f291000f509df6436d7ee7f7
7
- data.tar.gz: 9fe5baa3c0b004c5413355232f2925f19216e91b3dfaa05aa065e3e29aff6796a04491939e22f8469194698faa8470b2516419de57ce667a6c2196eb836810eb
6
+ metadata.gz: cb7daa78160f1707d39419c78d23833cdd5d11fd356223ee2f58cb3916d086b9b622173f12f2a35064a275d5bcccde47f68ddc5a53b6286b94fe683a357f4a56
7
+ data.tar.gz: d620a6cb1fdca4b80f3e6e52cfed313284634e93ee13eaa2ecced333cf595719f6f668f4fd448a4d9b4b8f6b392ca98750df9b0ab82f874ab3cc0ba6f79bddc3
@@ -16,9 +16,9 @@ rvm:
16
16
  - 2.4.3
17
17
  - 2.5.0
18
18
  gemfile:
19
- - gemfiles/rails42.gemfile
20
19
  - gemfiles/rails50.gemfile
21
20
  - gemfiles/rails51.gemfile
21
+ - gemfiles/rails52.gemfile
22
22
  matrix:
23
23
  fast_finish: true
24
24
  bundler_args: --jobs 3 --retry 3
data/Appraisals CHANGED
@@ -1,20 +1,20 @@
1
- appraise "rails42" do
2
- gem "activerecord", "~> 4.2.0"
3
- gem 'activesupport', '~> 4.2.0'
4
- gem 'mysql2', '>= 0.3.13', '< 0.5'
5
- gem 'pg', '~> 0.15'
6
- end
7
-
8
1
  appraise "rails50" do
9
2
  gem "activerecord", "~> 5.0.0"
10
3
  gem 'activesupport', '~> 5.0.0'
11
- gem 'mysql2', '>= 0.3.18', '< 0.5'
12
- gem 'pg', '~> 0.18'
4
+ gem 'mysql2', '>= 0.3.18', '< 0.6.0'
5
+ gem 'pg', '>= 0.18', '< 2.0'
13
6
  end
14
7
 
15
8
  appraise "rails51" do
16
9
  gem 'activerecord', '~> 5.1.0'
17
10
  gem 'activesupport', '~> 5.1.0'
18
- gem 'mysql2', '>= 0.3.18', '< 0.5'
19
- gem 'pg', '~> 0.18'
11
+ gem 'mysql2', '>= 0.3.18', '< 0.6.0'
12
+ gem 'pg', '>= 0.18', '< 2.0'
13
+ end
14
+
15
+ appraise "rails52" do
16
+ gem 'activerecord', '~> 5.2.0'
17
+ gem 'activesupport', '~> 5.2.0'
18
+ gem 'mysql2', '>= 0.4.4', '< 0.6.0'
19
+ gem 'pg', '>= 0.18', '< 2.0'
20
20
  end
data/README.md CHANGED
@@ -50,9 +50,8 @@ article.destory
50
50
  ```
51
51
 
52
52
  ## Support ActiveRecord version
53
- EbisuConnection supports ActiveRecord version 4.2 or later.
54
- If you are using Rails 4.1 or 4.0, you can use EbisuConnection version 2.1.0 or before.
55
- If you are using Rails 3.2, could use EbisuConnection version 1.0.0 or before.
53
+ EbisuConnection supports ActiveRecord version 5.0 or later.
54
+ If you are using Rails 4.2, you can use EbisuConnection version 2.4.2 or before.
56
55
 
57
56
  ## Support DB
58
57
  EbisuConnection supports MySQL and PostgreSQL.
@@ -82,26 +81,27 @@ $ gem install ebisu_connection
82
81
  config/database.yml
83
82
 
84
83
  ```yaml
85
- production:
84
+ default: &default
86
85
  adapter: mysql2
87
86
  encoding: utf8
88
- reconnect: true
89
- database: kaeru
90
- pool: 5
91
- username: master
92
- password: master
93
- host: localhost
94
- socket: /var/run/mysqld/mysqld.sock
87
+ pool: <%%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
88
+ username: root
89
+ password:
90
+
91
+ production:
92
+ <<: *default
93
+ database: blog_production
94
+ username: master_db_user
95
+ password: <%= ENV['MASTER_DATABASE_PASSWORD'] %>
96
+ host: master_db
95
97
 
96
98
  replica:
97
- username: replica
98
- password: replica
99
- host: replica
99
+ username: replica_db_user
100
+ password: <%= ENV['REPLICA_DATABASE_PASSWORD'] %>
100
101
  ```
101
102
 
102
- ```replica``` is a config to connect to replica servers.
103
- Others will use the master server settings.
104
-
103
+ `replica` is the configuration used for connecting read-only queries to the database replica. All other connections will use the database master settings.
104
+
105
105
  Config of each replica server fill out to `config/replica.yml`
106
106
 
107
107
  ```yaml
@@ -123,26 +123,27 @@ String format is it. You can write config with hash.
123
123
  If you may want to user multiple replica group, write multiple replica group to config/database.yml.
124
124
 
125
125
  ```yaml
126
- production:
126
+ default: &default
127
127
  adapter: mysql2
128
128
  encoding: utf8
129
- reconnect: true
130
- database: kaeru
131
- pool: 5
132
- username: master
133
- password: master
134
- host: localhost
135
- socket: /var/run/mysqld/mysqld.sock
129
+ pool: <%%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
130
+ username: root
131
+ password:
132
+
133
+ production:
134
+ <<: *default
135
+ database: blog_production
136
+ username: master_db_user
137
+ password: <%= ENV['MASTER_DATABASE_PASSWORD'] %>
138
+ host: master_db
136
139
 
137
140
  replica:
138
- username: replica
139
- password: replica
140
- host: replica
141
+ username: replica_db_user
142
+ password: <%= ENV['REPLICA_DATABASE_PASSWORD'] %>
141
143
 
142
144
  admin_replica:
143
- username: replica
144
- password: replica
145
- host: admin_replica
145
+ username: admin_replica_db_user
146
+ password: <%= ENV['ADMIN_REPLICA_DATABASE_PASSWORD'] %>
146
147
  ```
147
148
 
148
149
  Config of each replica server fill out to `config/replica.yml`
@@ -160,7 +161,7 @@ production:
160
161
  - "replica5, 20"
161
162
  ```
162
163
 
163
- And call establish_fresh_connection method in model that access to ```admin_replica``` replica group.
164
+ The custom replica stanza can then be applied as an argument to the `establish_fresh_connection` method in the models that should use it. For example:
164
165
 
165
166
  ```ruby
166
167
  class AdminUser < ActiveRecord::Base
@@ -168,7 +169,7 @@ class AdminUser < ActiveRecord::Base
168
169
  end
169
170
  ```
170
171
 
171
- The children is access to same replica group of parent.
172
+ The child (sub) classes of the configured model will inherit the same access as the parent class. Example:
172
173
 
173
174
  ```ruby
174
175
  class Parent < ActiveRecord::Base
@@ -182,10 +183,12 @@ class Benefit < Parent
182
183
  end
183
184
  ```
184
185
 
185
- AdminUser and Benefit access to ```admin_replica``` replica group.
186
+ The `AdminUser` and `Benefit` models will access the database configured for the `admin_replica` group.
187
+
186
188
 
189
+ ### Master-only Models
187
190
 
188
- ### Declare model that doesn't use replica db
191
+ It is possible to declare that specific models always use the DB master for all connections, using the `master_db_only!` method:
189
192
 
190
193
  ```ruby
191
194
  class SomethingModel < ActiveRecord::Base
@@ -193,10 +196,9 @@ class SomethingModel < ActiveRecord::Base
193
196
  end
194
197
  ```
195
198
 
196
- If model that always access to master servers is exist, You may want to write ```master_db_only!``` in model.
197
- The model that master_db_only model's child is always access to master db.
199
+ All queries generated by methods on the `CustomerState` model will be directed to the DB master.
198
200
 
199
- ### for Unicorn
201
+ ### Using EbisuConnection With Unicorn
200
202
 
201
203
  ```ruby
202
204
  before_fork do |server, worker|
@@ -204,12 +206,6 @@ before_fork do |server, worker|
204
206
  ActiveRecord::Base.clear_all_replica_connections!
205
207
  ...
206
208
  end
207
-
208
- after_fork do |server, worker|
209
- ...
210
- ActiveRecord::Base.establish_fresh_connection
211
- ...
212
- end
213
209
  ```
214
210
 
215
211
  ## Contributing
@@ -21,14 +21,13 @@ Gem::Specification.new do |spec|
21
21
 
22
22
  spec.required_ruby_version = '>= 2.2'
23
23
 
24
- spec.add_dependency 'fresh_connection', '~> 2.4.0'
25
- spec.add_dependency 'concurrent-ruby', '~> 1.0.0'
24
+ spec.add_dependency 'fresh_connection', '~> 3.0.0'
26
25
 
27
- spec.add_development_dependency 'mysql2', '>= 0.3.13', '< 0.5'
28
- spec.add_development_dependency 'pg', '~> 0.11'
26
+ spec.add_development_dependency 'mysql2', '>= 0.3.18', '< 0.6.0'
27
+ spec.add_development_dependency 'pg', '>= 0.18', '< 2.0'
29
28
  spec.add_development_dependency "bundler", ">= 1.3.0", "< 2.0"
30
29
  spec.add_development_dependency "rake", ">= 0.8.7"
31
30
  spec.add_development_dependency 'appraisal'
32
- spec.add_development_dependency "minitest"
31
+ spec.add_development_dependency "minitest", "~> 5.10.0"
33
32
  spec.add_development_dependency "minitest-reporters"
34
33
  end
@@ -4,7 +4,7 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 5.0.0"
6
6
  gem "activesupport", "~> 5.0.0"
7
- gem "mysql2", ">= 0.3.18", "< 0.5"
8
- gem "pg", "~> 0.18"
7
+ gem "mysql2", ">= 0.3.18", "< 0.6.0"
8
+ gem "pg", ">= 0.18", "< 2.0"
9
9
 
10
10
  gemspec path: "../"
@@ -4,7 +4,7 @@ source "https://rubygems.org"
4
4
 
5
5
  gem "activerecord", "~> 5.1.0"
6
6
  gem "activesupport", "~> 5.1.0"
7
- gem "mysql2", ">= 0.3.18", "< 0.5"
8
- gem "pg", "~> 0.18"
7
+ gem "mysql2", ">= 0.3.18", "< 0.6.0"
8
+ gem "pg", ">= 0.18", "< 2.0"
9
9
 
10
10
  gemspec path: "../"
@@ -0,0 +1,10 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "activerecord", "~> 5.2.0"
6
+ gem "activesupport", "~> 5.2.0"
7
+ gem "mysql2", ">= 0.4.4", "< 0.6.0"
8
+ gem "pg", ">= 0.18", "< 2.0"
9
+
10
+ gemspec path: "../"
@@ -1,17 +1,13 @@
1
1
  require 'active_support'
2
2
  require "fresh_connection"
3
- require "ebisu_connection/conf_file"
3
+ require "ebisu_connection/config"
4
4
 
5
5
  module EbisuConnection
6
6
  class << self
7
7
  attr_writer :env
8
8
 
9
9
  def replica_file=(file)
10
- ConfFile.replica_file = file
11
- end
12
-
13
- def slaves_file=(file)
14
- ConfFile.slaves_file = file
10
+ Config.replica_file = file
15
11
  end
16
12
 
17
13
  def env
@@ -0,0 +1,51 @@
1
+ require 'yaml'
2
+
3
+ module EbisuConnection
4
+ class Config
5
+ include Enumerable
6
+
7
+ class << self
8
+ attr_writer :replica_file
9
+
10
+ def config
11
+ return @config if defined?(@config)
12
+
13
+ conf = YAML.load_file(replica_file)
14
+ @config = conf[EbisuConnection.env.to_s] || {}
15
+ end
16
+
17
+ private
18
+
19
+ def replica_file
20
+ return @replica_file if @replica_file
21
+
22
+ raise "nothing replica_file. You have to set a file path using EbisuConnection.replica_file= method" unless defined?(Rails)
23
+
24
+ file = %w(yml yaml).map{|ext| Rails.root.join("config/replica.#{ext}").to_s }.detect {|f| File.exist?(f) }
25
+ return file if file
26
+
27
+ raise "nothing replica_file. You have to put a config/replica.yml file"
28
+ end
29
+ end
30
+
31
+ def initialize(spec_name)
32
+ @conf = load_config(spec_name)
33
+ end
34
+
35
+ def each(&block)
36
+ @conf.each(&block)
37
+ end
38
+
39
+ private
40
+
41
+ def load_config(spec_name)
42
+ c = self.class.config
43
+
44
+ if c.is_a?(Hash)
45
+ c[spec_name] || c
46
+ else
47
+ c
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,6 +1,5 @@
1
- require "concurrent"
2
1
  require "ebisu_connection/replica"
3
- require "ebisu_connection/greatest_common_divisor"
2
+ require "ebisu_connection/load_balancer"
4
3
 
5
4
  module EbisuConnection
6
5
  class ConnectionManager < FreshConnection::AbstractConnectionManager
@@ -9,65 +8,51 @@ module EbisuConnection
9
8
  def initialize(spec_name = nil)
10
9
  super
11
10
 
12
- @replicas = Concurrent::Array.new
13
-
14
- replica_conf.each do |conf|
15
- @replicas << Replica.new(conf, spec_name)
11
+ @replicas = replica_conf.map do |conf|
12
+ Replica.new(conf, spec_name)
16
13
  end
17
-
18
- recalc_roulette
19
14
  end
20
15
 
21
16
  def replica_connection
22
17
  raise AllReplicaHasGoneError if @replicas.empty?
23
- @replicas[@roulette.sample].connection
18
+ load_balancer.replica.connection
24
19
  end
25
20
 
26
21
  def put_aside!
27
- @replicas.each do |pool|
28
- pool.release_connection if pool.active_connection? && !pool.connection.transaction_open?
29
- end
22
+ @replicas.each(&:put_aside!)
30
23
  end
31
24
 
32
25
  def clear_all_connections!
33
- @replicas.each do |pool|
34
- pool.disconnect!
35
- end
26
+ @replicas.each(&:disconnect!)
36
27
  end
37
28
 
38
29
  def recovery?
39
- dead_replicas = @replicas.select do |pool|
40
- c = pool.connection rescue nil
30
+ dead_replicas = @replicas.select do |replica|
31
+ c = replica.connection rescue nil
41
32
  !c || !c.active?
42
33
  end
34
+
43
35
  return false if dead_replicas.empty?
44
36
 
45
- dead_replicas.each do |pool|
46
- pool.disconnect!
47
- @replicas.delete(pool)
37
+ dead_replicas.each do |replica|
38
+ replica.disconnect!
39
+ @replicas.delete(replica)
48
40
  end
49
41
 
50
42
  raise AllReplicaHasGoneError if @replicas.empty?
51
43
 
52
- recalc_roulette
44
+ @load_balancer = nil
53
45
  true
54
46
  end
55
47
 
56
48
  private
57
49
 
58
- def recalc_roulette
59
- weight_list = @replicas.map {|pool| pool.weight }
60
-
61
- @roulette = []
62
- gcd = GreatestCommonDivisor.calc(weight_list)
63
- weight_list.each_with_index do |w, index|
64
- weight = w / gcd
65
- @roulette.concat([index] * weight)
66
- end
50
+ def load_balancer
51
+ @load_balancer ||= LoadBalancer.new(@replicas)
67
52
  end
68
53
 
69
54
  def replica_conf
70
- ConfFile.replica_conf(spec_name)
55
+ @replica_conf ||= Config.new(spec_name)
71
56
  end
72
57
  end
73
58
  end
@@ -0,0 +1,32 @@
1
+ require "ebisu_connection/greatest_common_divisor"
2
+
3
+ module EbisuConnection
4
+ class LoadBalancer
5
+ def initialize(replicas)
6
+ @replicas = replicas
7
+ end
8
+
9
+ def replica
10
+ @replicas[roulette.sample]
11
+ end
12
+
13
+ private
14
+
15
+ def roulette
16
+ @roulette ||= calc_roulette
17
+ end
18
+
19
+ def calc_roulette
20
+ set = []
21
+ weight_list = @replicas.map(&:weight)
22
+ gcd = GreatestCommonDivisor.calc(weight_list)
23
+
24
+ weight_list.each_with_index do |w, index|
25
+ weight = w / gcd
26
+ set.concat([index] * weight)
27
+ end
28
+
29
+ set
30
+ end
31
+ end
32
+ end
@@ -28,6 +28,13 @@ module EbisuConnection
28
28
  def connection
29
29
  @pool.connection
30
30
  end
31
+
32
+ def put_aside!
33
+ return unless active_connection?
34
+ return if connection.transaction_open?
35
+
36
+ release_connection
37
+ end
31
38
 
32
39
  def active_connection?
33
40
  @pool.active_connection?
@@ -1,3 +1,3 @@
1
1
  module EbisuConnection
2
- VERSION = "2.4.2"
2
+ VERSION = "3.0.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ebisu_connection
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.2
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - tsukasaoishi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-02-06 00:00:00.000000000 Z
11
+ date: 2018-05-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fresh_connection
@@ -16,62 +16,54 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 2.4.0
19
+ version: 3.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 2.4.0
27
- - !ruby/object:Gem::Dependency
28
- name: concurrent-ruby
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - "~>"
32
- - !ruby/object:Gem::Version
33
- version: 1.0.0
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - "~>"
39
- - !ruby/object:Gem::Version
40
- version: 1.0.0
26
+ version: 3.0.0
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: mysql2
43
29
  requirement: !ruby/object:Gem::Requirement
44
30
  requirements:
45
31
  - - ">="
46
32
  - !ruby/object:Gem::Version
47
- version: 0.3.13
33
+ version: 0.3.18
48
34
  - - "<"
49
35
  - !ruby/object:Gem::Version
50
- version: '0.5'
36
+ version: 0.6.0
51
37
  type: :development
52
38
  prerelease: false
53
39
  version_requirements: !ruby/object:Gem::Requirement
54
40
  requirements:
55
41
  - - ">="
56
42
  - !ruby/object:Gem::Version
57
- version: 0.3.13
43
+ version: 0.3.18
58
44
  - - "<"
59
45
  - !ruby/object:Gem::Version
60
- version: '0.5'
46
+ version: 0.6.0
61
47
  - !ruby/object:Gem::Dependency
62
48
  name: pg
63
49
  requirement: !ruby/object:Gem::Requirement
64
50
  requirements:
65
- - - "~>"
51
+ - - ">="
66
52
  - !ruby/object:Gem::Version
67
- version: '0.11'
53
+ version: '0.18'
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: '2.0'
68
57
  type: :development
69
58
  prerelease: false
70
59
  version_requirements: !ruby/object:Gem::Requirement
71
60
  requirements:
72
- - - "~>"
61
+ - - ">="
73
62
  - !ruby/object:Gem::Version
74
- version: '0.11'
63
+ version: '0.18'
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: '2.0'
75
67
  - !ruby/object:Gem::Dependency
76
68
  name: bundler
77
69
  requirement: !ruby/object:Gem::Requirement
@@ -124,16 +116,16 @@ dependencies:
124
116
  name: minitest
125
117
  requirement: !ruby/object:Gem::Requirement
126
118
  requirements:
127
- - - ">="
119
+ - - "~>"
128
120
  - !ruby/object:Gem::Version
129
- version: '0'
121
+ version: 5.10.0
130
122
  type: :development
131
123
  prerelease: false
132
124
  version_requirements: !ruby/object:Gem::Requirement
133
125
  requirements:
134
- - - ">="
126
+ - - "~>"
135
127
  - !ruby/object:Gem::Version
136
- version: '0'
128
+ version: 5.10.0
137
129
  - !ruby/object:Gem::Dependency
138
130
  name: minitest-reporters
139
131
  requirement: !ruby/object:Gem::Requirement
@@ -167,13 +159,14 @@ files:
167
159
  - bin/setup
168
160
  - bin/test
169
161
  - ebisu_connection.gemspec
170
- - gemfiles/rails42.gemfile
171
162
  - gemfiles/rails50.gemfile
172
163
  - gemfiles/rails51.gemfile
164
+ - gemfiles/rails52.gemfile
173
165
  - lib/ebisu_connection.rb
174
- - lib/ebisu_connection/conf_file.rb
166
+ - lib/ebisu_connection/config.rb
175
167
  - lib/ebisu_connection/connection_manager.rb
176
168
  - lib/ebisu_connection/greatest_common_divisor.rb
169
+ - lib/ebisu_connection/load_balancer.rb
177
170
  - lib/ebisu_connection/replica.rb
178
171
  - lib/ebisu_connection/version.rb
179
172
  homepage: https://github.com/tsukasaoishi/ebisu_connection
@@ -196,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
196
189
  version: '0'
197
190
  requirements: []
198
191
  rubyforge_project:
199
- rubygems_version: 2.7.3
192
+ rubygems_version: 2.7.6
200
193
  signing_key:
201
194
  specification_version: 4
202
195
  summary: EbisuConnection supports connections with configured replica servers.
@@ -1,10 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "activerecord", "~> 4.2.0"
6
- gem "activesupport", "~> 4.2.0"
7
- gem "mysql2", ">= 0.3.13", "< 0.5"
8
- gem "pg", "~> 0.15"
9
-
10
- gemspec path: "../"
@@ -1,64 +0,0 @@
1
- require 'yaml'
2
- require 'active_support/deprecation'
3
-
4
- module EbisuConnection
5
- class ConfFile
6
- class << self
7
- attr_writer :replica_file
8
-
9
- def slaves_file=(file)
10
- ActiveSupport::Deprecation.warn(
11
- "'slaves_file=' is deprecated and will removed from version 2.5.0. use 'replica_file=' instead."
12
- )
13
-
14
- self.replica_file = file
15
- end
16
-
17
- def replica_conf(spec_name)
18
- return config unless config.is_a?(Hash)
19
-
20
- c = config[spec_name]
21
- return c if c
22
-
23
- if spec_name == "replica" && config.key?("slave")
24
- ActiveSupport::Deprecation.warn(
25
- "'slave' in replica.yml is deprecated and will ignored from version 2.5.0. use 'replica' insted."
26
- )
27
-
28
- c = config["slave"]
29
- end
30
-
31
- c || config
32
- end
33
-
34
- private
35
-
36
- def config
37
- return @config if defined?(@config)
38
-
39
- conf = YAML.load_file(replica_file)
40
- @config = conf[EbisuConnection.env.to_s] || {}
41
- end
42
-
43
- def replica_file
44
- return @replica_file if @replica_file
45
-
46
- raise "nothing replica_file. You have to set a file path using EbisuConnection.replica_file= method" unless defined?(Rails)
47
-
48
- file = %w(yml yaml).map{|ext| Rails.root.join("config/replica.#{ext}").to_s }.detect {|f| File.exist?(f) }
49
- return file if file
50
-
51
- file = %w(yml yaml).map{|ext| Rails.root.join("config/slave.#{ext}").to_s }.detect {|f| File.exist?(f) }
52
- if file
53
- ActiveSupport::Deprecation.warn(
54
- "file name 'config/#{file}' is deprecated and will ignored from version 2.5.0. use 'config/replica.yml' insted."
55
- )
56
-
57
- return file
58
- end
59
-
60
- raise "nothing replica_file. You have to put a config/replica.yml file"
61
- end
62
- end
63
- end
64
- end