fresh_connection 3.0.0.rc2 → 3.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9647d59e3a6fcfa7c194109a6797bc0962f42a491ff226bbe140a093a3c71c28
4
- data.tar.gz: 133f4e76f9e4f369b69241e18e331f503b2e00bc337c7778f3c026aee8a08796
3
+ metadata.gz: 4b67bc1788b59977212ab408786a2c50de89e59834dcb7eabfd45fd5a8b556aa
4
+ data.tar.gz: '0555593d5a5e54322e767ea4475d86263ea87c48d2aa618156ace835e5881389'
5
5
  SHA512:
6
- metadata.gz: d5a063f3414c1e2251410930a06e09966af1db29920ec46d25908465dfef59c43feaf458aa3d71e6e04e82d343b2bca5f5caeb54a05be5947cd6800330a5ab12
7
- data.tar.gz: 6d626b364389c7d63b687e1a6b6d2c551d1f66f73d32b782bb43505f5e44cec268d87779234c56929d678375cd929ca5ac13ed48557c12515e55e35c2097a1f9
6
+ metadata.gz: e20fade2abed85117b4dc3e55c7188ee85cdf723a0a65a270f3b53105812ff416d0d4afe94a366f87fd24dc51352d332d766b1a7622d974ec19426b0008e4087
7
+ data.tar.gz: 3de5c92aac34aa8fa73f556e53e0063857020724578779d8eb0f197865baf230e09c348666f49685281971d2239eb41ad7449fc2d783f16026a250f21a1d14f1
data/Appraisals CHANGED
@@ -13,8 +13,8 @@ appraise "rails51" do
13
13
  end
14
14
 
15
15
  appraise "rails52" do
16
- gem 'activerecord', '5.2.0'
17
- gem 'activesupport', '5.2.0'
16
+ gem 'activerecord', '~> 5.2.0'
17
+ gem 'activesupport', '~> 5.2.0'
18
18
  gem 'mysql2', '>= 0.4.4', '< 0.6.0'
19
19
  gem 'pg', '>= 0.18', '< 2.0'
20
20
  end
data/README.md CHANGED
@@ -44,8 +44,6 @@ Account.count
44
44
  ### Access to the DB Master
45
45
  If you wish to ensure that queries are directed to the DB master, call `read_master`.
46
46
 
47
- > Note: Before version 0.4.3, `readonly(false)` must be used.
48
-
49
47
  ```ruby
50
48
  Article.where(id: 1).read_master
51
49
 
@@ -72,9 +70,8 @@ old_article.destroy
72
70
 
73
71
  ## ActiveRecord Versions Supported
74
72
 
75
- - FreshConnection supports ActiveRecord version 4.2 or later.
76
- - If you are using Rails 4.1 or 4.0, you can use FreshConnection version 2.1.2 or before.
77
- - If you are using Rails 3.2, you can use FreshConnection version 1.0.0 or before.
73
+ - FreshConnection supports ActiveRecord version 5.0 or later.
74
+ - If you are using Rails 4.2, you can use FreshConnection version 2.4.4 or before.
78
75
 
79
76
  ## Databases Supported
80
77
  FreshConnection currently supports MySQL and PostgreSQL.
@@ -98,88 +95,68 @@ Or install it manually with:
98
95
  $ gem install fresh_connection
99
96
  ```
100
97
 
101
- ### Variant Installation For Use With Some Other ActiveRecord Gems
102
-
103
- If you are using NewRelic or other gems that insert themselves into the ActiveRecord call-chain using `method_alias`, then a slight variation on the installation and configuration is required.
104
-
105
- In the `Gemfile`, use:
106
-
107
- ```ruby
108
- gem "fresh_connection", require: false
109
- ```
110
-
111
- Then, in `config/application.rb`, add the following:
112
-
113
- ```ruby
114
- config.after_initialize do
115
- require 'fresh_connection'
116
- end
117
- ```
118
-
119
98
  ## Configuration
120
99
 
121
100
  The FreshConnection database replica is configured within the standard Rails
122
101
  database configuration file, `config/database.yml`, using a `replica:` stanza.
123
102
 
124
- *Security Note*:
125
-
126
- > We strongly recommend against using secrets within the `config/database.yml`
127
- > file. Instead, it is both convenient and advisable to use ERB substitutions with
128
- > environment variables within the file.
129
-
130
- > Using the [`dotenv`](https://github.com/bkeepers/dotenv) gem to keep secrets in a `.env` file that is never committed
131
- > to the source management repository will help make secrets manageable.
132
-
133
103
  Below is a sample such configuration file.
134
104
 
135
105
  ### `config/database.yml`
136
106
 
137
107
  ```yaml
108
+ default: &default
109
+ adapter: mysql2
110
+ encoding: utf8
111
+ pool: <%%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
112
+ username: root
113
+ password:
114
+
138
115
  production:
139
- adapter: mysql2
140
- encoding: utf8
141
- reconnect: true
142
- database: <%= ENV['DB_MASTER_NAME'] %>
143
- pool: 5
144
- username: <%= ENV['DB_MASTER_USER'] %>
145
- password: <%= ENV['DB_MASTER_PASS'] %>
146
- host: <%= ENV['DB_MASTER_HOST'] %>
147
- socket: /var/run/mysqld/mysqld.sock
116
+ <<: *default
117
+ database: blog_production
118
+ username: master_db_user
119
+ password: <%= ENV['MASTER_DATABASE_PASSWORD'] %>
120
+ host: master_db
148
121
 
149
122
  replica:
150
- username: <%= ENV['DB_REPLICA_USER'] %>
151
- password: <%= ENV['DB_REPLICA_PASS'] %>
152
- host: <%= ENV['DB_REPLICA_HOST'] %>
123
+ username: replica_db_user
124
+ password: <%= ENV['REPLICA_DATABASE_PASSWORD'] %>
125
+ host: replica_db
153
126
  ```
154
127
 
155
128
  `replica` is the configuration used for connecting read-only queries to the database replica. All other connections will use the database master settings.
156
129
 
130
+
157
131
  ### Multiple DB Replicas
158
132
  If you want to use multiple configured DB replicas, the configuration can contain multiple `replica` stanzas in the configuration file `config/database.yml`.
159
133
 
160
134
  For example:
161
135
 
162
136
  ```yaml
137
+ default: &default
138
+ adapter: mysql2
139
+ encoding: utf8
140
+ pool: <%%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
141
+ username: root
142
+ password:
143
+
163
144
  production:
164
- adapter: mysql2
165
- encoding: utf8
166
- reconnect: true
167
- database: <%= ENV['DB_MASTER_NAME'] %>
168
- pool: 5
169
- username: <%= ENV['DB_MASTER_USER'] %>
170
- password: <%= ENV['DB_MASTER_PASS'] %>
171
- host: <%= ENV['DB_MASTER_HOST'] %>
172
- socket: /var/run/mysqld/mysqld.sock
145
+ <<: *default
146
+ database: blog_production
147
+ username: master_db_user
148
+ password: <%= ENV['MASTER_DATABASE_PASSWORD'] %>
149
+ host: master_db
173
150
 
174
151
  replica:
175
- username: <%= ENV['DB_REPLICA_USER'] %>
176
- password: <%= ENV['DB_REPLICA_PASS'] %>
177
- host: <%= ENV['DB_REPLICA_HOST'] %>
152
+ username: replica_db_user
153
+ password: <%= ENV['REPLICA_DATABASE_PASSWORD'] %>
154
+ host: replica_db
178
155
 
179
156
  admin_replica:
180
- username: <%= ENV['DB_ADMIN_REPLICA_USER'] %>
181
- password: <%= ENV['DB_ADMIN_REPLICA_PASS'] %>
182
- host: <%= ENV['DB_ADMIN_REPLICA_HOST'] %>
157
+ username: admin_replica_db_user
158
+ password: <%= ENV['ADMIN_REPLICA_DATABASE_PASSWORD'] %>
159
+ host: admin_replica_db
183
160
  ```
184
161
 
185
162
  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:
@@ -211,46 +188,23 @@ The `AdminUser` and `Benefit` models will access the database configured for the
211
188
 
212
189
  The `Customer` model will use the default connections: read-only queries will connect to the standard DB replica, and state-changing queries will connect to the DB master.
213
190
 
214
- ### Replica Configuration With Environment Variables
215
191
 
192
+ ### Replica Configuration With Environment Variables
216
193
 
217
194
  Alternative to using a configuration in the `database.yml` file, it is possible to completely specify the replica access components using environment variables.
218
195
 
219
- The environment variables corresponding to the `:replica` group are `DATABASE_REPLICA_URL` and `DATABASE_REPLICA1_URL`, with the latter being used only if the former is not defined.
220
-
221
- The URL value is a [URL](https://en.wikipedia.org/wiki/URL) string with the following components:
222
-
223
- _adapter://dbuser:dbpass@dbhost:dbport/dbname?querypath_
224
-
225
- where the components are:
226
-
227
- | Component | Purpose | Examples |
228
- | --------- | ------- | --------- |
229
- | _adapter_ | Declares the database adapter | `mysql`, `postgresql` |
230
- | _dbuser_ | The login for the database | `root`, `postgres` |
231
- | _dbpass_ | The password for the database | |
232
- | _dbhost_ | The hostname for the database | `db1`, `localhost` |
233
- | _dbport_ | The port for the database connection | `3306`, `5432` |
234
- | _dbname_ | The name of the database | `mydb`, `appdb`, etc. |
235
- | _querypath_ | One or more variable assignments: _var1=val1_, separated by '&' | `pools=5&reconnect=true` |
196
+ The environment variables corresponding to the `:replica` group are `DATABASE_REPLICA_URL`.
197
+ The URL string components is the same as Rails' `DATABASE_URL'.
236
198
 
237
-
238
- For example, here is a URL appropriate for a connection to a test database on the local host, on a custom port:
239
-
240
- export DATABASE_REPLICA_URL='postgresql://root:somepw@localhost:6432/test_db?pool=5&reconnect=true
241
-
242
- ### Multiple Replica Environment Variables
199
+ #### Multiple Replica Environment Variables
243
200
 
244
201
  To specific URLs for multiple replicas, replace the string `REPLICA` in the environment variable name with the replica name, in upper case. See the examples for replicas: `:replica1`, `:replica2`, and `:admin_replica`
245
202
 
246
203
 
247
- ENVIRONMENT_REPLICA1_URL='mysql://localhost/dbreplica1?pool=5&reconnect=true'
248
- ENVIRONMENT_REPLICA2_URL='postgresql://localhost:6432/ro_db?pool=5&reconnect=true'
249
- ENVIRONMENT_ADMIN_REPLICA_URL='postgresql://localhost:6432/admin_db?pool=5&reconnect=true'
250
-
251
- ### Special-Case Replica URL
204
+ DATABASE_REPLICA1_URL='mysql://localhost/dbreplica1?pool=5&reconnect=true'
205
+ DATABASE_REPLICA2_URL='postgresql://localhost:6432/ro_db?pool=5&reconnect=true'
206
+ DATABASE_ADMIN_REPLICA_URL='postgresql://localhost:6432/admin_db?pool=5&reconnect=true'
252
207
 
253
- When `:replica` is used but `DATABASE_REPLICA_URL` is *not* defined, then the value of `DATABASE_REPLICA1_URL` will be used if it is defined.
254
208
 
255
209
  ### Master-only Models
256
210
 
@@ -274,12 +228,6 @@ before_fork do |server, worker|
274
228
  ActiveRecord::Base.clear_all_replica_connections!
275
229
  ...
276
230
  end
277
-
278
- after_fork do |server, worker|
279
- ...
280
- ActiveRecord::Base.establish_fresh_connection
281
- ...
282
- end
283
231
  ```
284
232
 
285
233
  ### Replica Connection Manager
@@ -2,8 +2,8 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "activerecord", "5.2.0"
6
- gem "activesupport", "5.2.0"
5
+ gem "activerecord", "~> 5.2.0"
6
+ gem "activesupport", "~> 5.2.0"
7
7
  gem "mysql2", ">= 0.4.4", "< 0.6.0"
8
8
  gem "pg", ">= 0.18", "< 2.0"
9
9
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FreshConnection
4
- VERSION = "3.0.0.rc2"
4
+ VERSION = "3.0.0"
5
5
  end
6
6
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fresh_connection
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.rc2
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tsukasa OISHI
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-04-26 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: activerecord
@@ -251,9 +251,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
251
251
  version: '2.2'
252
252
  required_rubygems_version: !ruby/object:Gem::Requirement
253
253
  requirements:
254
- - - ">"
254
+ - - ">="
255
255
  - !ruby/object:Gem::Version
256
- version: 1.3.1
256
+ version: '0'
257
257
  requirements: []
258
258
  rubyforge_project:
259
259
  rubygems_version: 2.7.6