rails_multisite 2.0.7 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
|
- - ">="
|