rails_multisite 2.0.7 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rails_multisite might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/README.md +1 -3
- data/lib/rails_multisite/connection_management.rb +44 -16
- data/lib/rails_multisite/middleware.rb +1 -0
- data/lib/rails_multisite/version.rb +1 -1
- data/lib/tasks/db.rake +1 -0
- data/lib/tasks/generators.rake +1 -1
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e9d253acd86ab0b218a43d6cf67bc7bd3948b03c8288872f75c8788ff1c54373
|
4
|
+
data.tar.gz: 1141a30cad5dba7992b6adc5ab1c315488789430f9bee82ba4bb0b189447d27c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a2a3ac0846e4b589a44e5285d8bba6be418e0a535c642a95f23073dcf16d51425e87d27ed74e5e58b04e25a5cc88620d7937530bd25285dd013d8e81689fb6e
|
7
|
+
data.tar.gz: 5520157f4aed32cc36b03e289ccb56b4f43385f7a153f64245a4ab570b13138826b8cf1d2aaac78b40b1d7231501575a53df4af0f1d56472ef267e82f90f6d92
|
data/README.md
CHANGED
@@ -35,7 +35,6 @@ mlp:
|
|
35
35
|
host: dbhost
|
36
36
|
pool: 5
|
37
37
|
timeout: 5000
|
38
|
-
db_id: 1 # ensure db_id is unique for each site
|
39
38
|
host_names:
|
40
39
|
- discourse.equestria.com
|
41
40
|
- discourse.equestria.internal
|
@@ -48,7 +47,6 @@ drwho:
|
|
48
47
|
host: dbhost
|
49
48
|
pool: 5
|
50
49
|
timeout: 5000
|
51
|
-
db_id: 2 # ensure db_id is unique for each site
|
52
50
|
host_names:
|
53
51
|
- discuss.tardis.gallifrey
|
54
52
|
```
|
@@ -92,7 +90,7 @@ db_two:
|
|
92
90
|
To get a Rails console that is connected to `some_database_1` database:
|
93
91
|
|
94
92
|
```
|
95
|
-
|
93
|
+
RAILS_DB=db_one rails console
|
96
94
|
```
|
97
95
|
|
98
96
|
|
@@ -4,6 +4,7 @@ module RailsMultisite
|
|
4
4
|
class ConnectionManagement
|
5
5
|
|
6
6
|
DEFAULT = 'default'
|
7
|
+
SPEC_KLASS = ActiveRecord::ConnectionAdapters::ConnectionSpecification
|
7
8
|
|
8
9
|
def self.default_config_filename
|
9
10
|
File.absolute_path(Rails.root.to_s + "/config/multisite.yml")
|
@@ -35,7 +36,7 @@ module RailsMultisite
|
|
35
36
|
end
|
36
37
|
|
37
38
|
def self.reload
|
38
|
-
@instance
|
39
|
+
@instance.reload
|
39
40
|
end
|
40
41
|
|
41
42
|
def self.has_db?(db)
|
@@ -118,7 +119,19 @@ module RailsMultisite
|
|
118
119
|
def initialize(config_filename)
|
119
120
|
@config_filename = config_filename
|
120
121
|
|
121
|
-
|
122
|
+
@connection_handlers = {}
|
123
|
+
@db_spec_cache = {}
|
124
|
+
|
125
|
+
@default_spec = SPEC_KLASS::Resolver.new(ActiveRecord::Base.configurations).spec(Rails.env.to_sym)
|
126
|
+
@default_connection_handler = ActiveRecord::Base.connection_handler
|
127
|
+
@established_default = false
|
128
|
+
|
129
|
+
@reload_mutex = Mutex.new
|
130
|
+
|
131
|
+
load_config!
|
132
|
+
end
|
133
|
+
|
134
|
+
def load_config!
|
122
135
|
configs = YAML::load(File.open(@config_filename))
|
123
136
|
|
124
137
|
no_prepared_statements = ActiveRecord::Base.configurations[Rails.env]["prepared_statements"] == false
|
@@ -136,27 +149,46 @@ module RailsMultisite
|
|
136
149
|
resolve_configs = ActiveRecord::DatabaseConfigurations.new(configs)
|
137
150
|
end
|
138
151
|
|
139
|
-
resolver =
|
140
|
-
@db_spec_cache = Hash[*configs.map { |k, _| [k, resolver.spec(k.to_sym)] }.flatten]
|
152
|
+
resolver = SPEC_KLASS::Resolver.new(resolve_configs)
|
141
153
|
|
142
|
-
|
154
|
+
# Build a hash of db name => spec
|
155
|
+
new_db_spec_cache = Hash[*configs.map { |k, _| [k, resolver.spec(k.to_sym)] }.flatten]
|
156
|
+
new_db_spec_cache.each do |k, v|
|
157
|
+
# If spec already existed, use the old version
|
158
|
+
if v&.to_hash == @db_spec_cache[k]&.to_hash
|
159
|
+
new_db_spec_cache[k] = @db_spec_cache[k]
|
160
|
+
end
|
161
|
+
end
|
143
162
|
|
163
|
+
# Build a hash of hostname => spec
|
164
|
+
new_host_spec_cache = {}
|
144
165
|
configs.each do |k, v|
|
145
166
|
next unless v["host_names"]
|
146
167
|
v["host_names"].each do |host|
|
147
|
-
|
168
|
+
new_host_spec_cache[host] = new_db_spec_cache[k]
|
148
169
|
end
|
149
170
|
end
|
150
171
|
|
151
|
-
|
172
|
+
# Add the default hostnames as well
|
152
173
|
ActiveRecord::Base.configurations[Rails.env]["host_names"].each do |host|
|
153
|
-
|
174
|
+
new_host_spec_cache[host] = @default_spec
|
154
175
|
end
|
155
176
|
|
156
|
-
|
177
|
+
removed_dbs = @db_spec_cache.keys - new_db_spec_cache.keys
|
178
|
+
removed_specs = @db_spec_cache.values_at(*removed_dbs)
|
157
179
|
|
158
|
-
@
|
159
|
-
@
|
180
|
+
@host_spec_cache = new_host_spec_cache
|
181
|
+
@db_spec_cache = new_db_spec_cache
|
182
|
+
|
183
|
+
# Clean up connection handler cache.
|
184
|
+
# (@connection_handlers is a hash of spec => handler)
|
185
|
+
removed_specs.each { |s| @connection_handlers.delete(s) }
|
186
|
+
end
|
187
|
+
|
188
|
+
def reload
|
189
|
+
@reload_mutex.synchronize do
|
190
|
+
load_config!
|
191
|
+
end
|
160
192
|
end
|
161
193
|
|
162
194
|
def has_db?(db)
|
@@ -320,11 +352,7 @@ module RailsMultisite
|
|
320
352
|
private
|
321
353
|
|
322
354
|
def handler_establish_connection(handler, spec)
|
323
|
-
|
324
|
-
handler.establish_connection(spec.config)
|
325
|
-
else
|
326
|
-
handler.establish_connection(ActiveRecord::Base, spec)
|
327
|
-
end
|
355
|
+
handler.establish_connection(spec.config)
|
328
356
|
end
|
329
357
|
|
330
358
|
end
|
data/lib/tasks/db.rake
CHANGED
data/lib/tasks/generators.rake
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
desc "generate multisite config file (if missing)"
|
2
3
|
task "multisite:generate:config" => :environment do
|
3
4
|
filename = RailsMultisite::ConnectionManagement.config_filename
|
@@ -14,7 +15,6 @@ task "multisite:generate:config" => :environment do
|
|
14
15
|
# host: localhost
|
15
16
|
# pool: 5
|
16
17
|
# timeout: 5000
|
17
|
-
# db_id: 1 # optionally include other settings you need
|
18
18
|
# host_names:
|
19
19
|
# - www.mysite.com
|
20
20
|
# - www.anothersite.com
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_multisite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,7 +16,7 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '5.0'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
22
|
version: '7'
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ">"
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: '
|
29
|
+
version: '5.0'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '7'
|
@@ -36,7 +36,7 @@ dependencies:
|
|
36
36
|
requirements:
|
37
37
|
- - ">"
|
38
38
|
- !ruby/object:Gem::Version
|
39
|
-
version: '
|
39
|
+
version: '5.0'
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
42
|
version: '7'
|
@@ -46,7 +46,7 @@ dependencies:
|
|
46
46
|
requirements:
|
47
47
|
- - ">"
|
48
48
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
49
|
+
version: '5.0'
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
52
|
version: '7'
|
@@ -78,7 +78,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
78
78
|
requirements:
|
79
79
|
- - ">="
|
80
80
|
- !ruby/object:Gem::Version
|
81
|
-
version: 2.
|
81
|
+
version: 2.4.0
|
82
82
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
83
|
requirements:
|
84
84
|
- - ">="
|