orchestration 0.7.0 → 0.7.3

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: 7891efd1c4930036b2245fad46bc9bc78c0de97b3c2cce26ede48d5a6de34a2c
4
- data.tar.gz: c56d7d3193fd6cafe76dc823924bcc1ba74fda288090d1424bfdce148789cb51
3
+ metadata.gz: fd668d1ea77820075d2ad454dde1691304daed2c1e26d7e446e2e729a62625db
4
+ data.tar.gz: 0d3e1d8796810142973303a530972b9bb38e165822c7b403c52ddfb439d91947
5
5
  SHA512:
6
- metadata.gz: c82db0ac9646d8b93ad2ef72cff3216106e8558f670c086cd0647f5496559f0a0c32309b8e2680323e627345a9f6da9f2745d4d67a5a1d8d1e7a56d2fc91417c
7
- data.tar.gz: c0fc26b8ea7f66f7a50b52de3991fe5f4a99ec73b9186312e397fce229c184f8bdf8182d8bca991a79cb5b95f24ed3ce1907048bf27dceff482437129ce18ad4
6
+ metadata.gz: d308e88beaaf4c792c2aea6c7ac3ea78c5249ac956da2f1a8ae0637432321a1118a02d9ccef59ae6abf51ac0f381e4bf7e7be249721d1bd2138a51e4fda63f4a
7
+ data.tar.gz: 322620f4c68eb845f63006531355d93193df31757dae2ca97b6bc5d45186262557da6a4f9381fd8dfa6754e619cb370d0b5d93aa6e155f053fb3265e2639ab06
data/.gitignore CHANGED
@@ -9,8 +9,6 @@
9
9
  # rspec failure tracking
10
10
  .rspec_status
11
11
 
12
- Gemfile.lock
13
-
14
12
  *.swp
15
13
  *.swo
16
14
 
@@ -34,5 +32,3 @@ docker/.build/
34
32
  docker/.context.tar
35
33
 
36
34
  .DS_Store
37
-
38
- .ruby-version
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.1.2
data/Gemfile.lock ADDED
@@ -0,0 +1,264 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ orchestration (0.7.2)
5
+ database_url (~> 0.1.2)
6
+ erubis (~> 2.7)
7
+ i18n
8
+ paint (~> 2.2)
9
+ rails (>= 6.1)
10
+ thor (~> 1.2)
11
+
12
+ GEM
13
+ remote: https://rubygems.org/
14
+ specs:
15
+ actioncable (7.0.3)
16
+ actionpack (= 7.0.3)
17
+ activesupport (= 7.0.3)
18
+ nio4r (~> 2.0)
19
+ websocket-driver (>= 0.6.1)
20
+ actionmailbox (7.0.3)
21
+ actionpack (= 7.0.3)
22
+ activejob (= 7.0.3)
23
+ activerecord (= 7.0.3)
24
+ activestorage (= 7.0.3)
25
+ activesupport (= 7.0.3)
26
+ mail (>= 2.7.1)
27
+ net-imap
28
+ net-pop
29
+ net-smtp
30
+ actionmailer (7.0.3)
31
+ actionpack (= 7.0.3)
32
+ actionview (= 7.0.3)
33
+ activejob (= 7.0.3)
34
+ activesupport (= 7.0.3)
35
+ mail (~> 2.5, >= 2.5.4)
36
+ net-imap
37
+ net-pop
38
+ net-smtp
39
+ rails-dom-testing (~> 2.0)
40
+ actionpack (7.0.3)
41
+ actionview (= 7.0.3)
42
+ activesupport (= 7.0.3)
43
+ rack (~> 2.0, >= 2.2.0)
44
+ rack-test (>= 0.6.3)
45
+ rails-dom-testing (~> 2.0)
46
+ rails-html-sanitizer (~> 1.0, >= 1.2.0)
47
+ actiontext (7.0.3)
48
+ actionpack (= 7.0.3)
49
+ activerecord (= 7.0.3)
50
+ activestorage (= 7.0.3)
51
+ activesupport (= 7.0.3)
52
+ globalid (>= 0.6.0)
53
+ nokogiri (>= 1.8.5)
54
+ actionview (7.0.3)
55
+ activesupport (= 7.0.3)
56
+ builder (~> 3.1)
57
+ erubi (~> 1.4)
58
+ rails-dom-testing (~> 2.0)
59
+ rails-html-sanitizer (~> 1.1, >= 1.2.0)
60
+ activejob (7.0.3)
61
+ activesupport (= 7.0.3)
62
+ globalid (>= 0.3.6)
63
+ activemodel (7.0.3)
64
+ activesupport (= 7.0.3)
65
+ activerecord (7.0.3)
66
+ activemodel (= 7.0.3)
67
+ activesupport (= 7.0.3)
68
+ activestorage (7.0.3)
69
+ actionpack (= 7.0.3)
70
+ activejob (= 7.0.3)
71
+ activerecord (= 7.0.3)
72
+ activesupport (= 7.0.3)
73
+ marcel (~> 1.0)
74
+ mini_mime (>= 1.1.0)
75
+ activesupport (7.0.3)
76
+ concurrent-ruby (~> 1.0, >= 1.0.2)
77
+ i18n (>= 1.6, < 2)
78
+ minitest (>= 5.1)
79
+ tzinfo (~> 2.0)
80
+ addressable (2.8.0)
81
+ public_suffix (>= 2.0.2, < 5.0)
82
+ amq-protocol (2.3.2)
83
+ ast (2.4.2)
84
+ bson (4.15.0)
85
+ builder (3.2.4)
86
+ bunny (2.19.0)
87
+ amq-protocol (~> 2.3, >= 2.3.1)
88
+ sorted_set (~> 1, >= 1.0.2)
89
+ concurrent-ruby (1.1.10)
90
+ crack (0.4.5)
91
+ rexml
92
+ crass (1.0.6)
93
+ database_url (0.1.2)
94
+ devpack (0.4.0)
95
+ diff-lcs (1.5.0)
96
+ digest (3.1.0)
97
+ erubi (1.10.0)
98
+ erubis (2.7.0)
99
+ globalid (1.0.0)
100
+ activesupport (>= 5.0)
101
+ hashdiff (1.0.1)
102
+ i18n (1.10.0)
103
+ concurrent-ruby (~> 1.0)
104
+ loofah (2.18.0)
105
+ crass (~> 1.0.2)
106
+ nokogiri (>= 1.5.9)
107
+ mail (2.7.1)
108
+ mini_mime (>= 0.1.1)
109
+ marcel (1.0.2)
110
+ method_source (1.0.0)
111
+ mini_mime (1.1.2)
112
+ minitest (5.15.0)
113
+ mongo (2.17.1)
114
+ bson (>= 4.8.2, < 5.0.0)
115
+ mongoid (7.4.0)
116
+ activemodel (>= 5.1, < 7.1, != 7.0.0)
117
+ mongo (>= 2.10.5, < 3.0.0)
118
+ ruby2_keywords (~> 0.0.5)
119
+ mysql2 (0.5.4)
120
+ net-imap (0.2.3)
121
+ digest
122
+ net-protocol
123
+ strscan
124
+ net-pop (0.1.1)
125
+ digest
126
+ net-protocol
127
+ timeout
128
+ net-protocol (0.1.3)
129
+ timeout
130
+ net-smtp (0.3.1)
131
+ digest
132
+ net-protocol
133
+ timeout
134
+ nio4r (2.5.8)
135
+ nokogiri (1.13.6-x86_64-linux)
136
+ racc (~> 1.4)
137
+ paint (2.2.1)
138
+ parallel (1.22.1)
139
+ parser (3.1.2.0)
140
+ ast (~> 2.4.1)
141
+ pg (1.3.5)
142
+ public_suffix (4.0.7)
143
+ racc (1.6.0)
144
+ rack (2.2.3)
145
+ rack-test (1.1.0)
146
+ rack (>= 1.0, < 3)
147
+ rails (7.0.3)
148
+ actioncable (= 7.0.3)
149
+ actionmailbox (= 7.0.3)
150
+ actionmailer (= 7.0.3)
151
+ actionpack (= 7.0.3)
152
+ actiontext (= 7.0.3)
153
+ actionview (= 7.0.3)
154
+ activejob (= 7.0.3)
155
+ activemodel (= 7.0.3)
156
+ activerecord (= 7.0.3)
157
+ activestorage (= 7.0.3)
158
+ activesupport (= 7.0.3)
159
+ bundler (>= 1.15.0)
160
+ railties (= 7.0.3)
161
+ rails-dom-testing (2.0.3)
162
+ activesupport (>= 4.2.0)
163
+ nokogiri (>= 1.6)
164
+ rails-html-sanitizer (1.4.2)
165
+ loofah (~> 2.3)
166
+ railties (7.0.3)
167
+ actionpack (= 7.0.3)
168
+ activesupport (= 7.0.3)
169
+ method_source
170
+ rake (>= 12.2)
171
+ thor (~> 1.0)
172
+ zeitwerk (~> 2.5)
173
+ rainbow (3.1.1)
174
+ rake (13.0.6)
175
+ rbtree (0.4.5)
176
+ redis (4.6.0)
177
+ regexp_parser (2.4.0)
178
+ rexml (3.2.5)
179
+ rspec (3.11.0)
180
+ rspec-core (~> 3.11.0)
181
+ rspec-expectations (~> 3.11.0)
182
+ rspec-mocks (~> 3.11.0)
183
+ rspec-core (3.11.0)
184
+ rspec-support (~> 3.11.0)
185
+ rspec-expectations (3.11.0)
186
+ diff-lcs (>= 1.2.0, < 2.0)
187
+ rspec-support (~> 3.11.0)
188
+ rspec-its (1.3.0)
189
+ rspec-core (>= 3.0.0)
190
+ rspec-expectations (>= 3.0.0)
191
+ rspec-mocks (3.11.1)
192
+ diff-lcs (>= 1.2.0, < 2.0)
193
+ rspec-support (~> 3.11.0)
194
+ rspec-support (3.11.0)
195
+ rubocop (1.30.0)
196
+ parallel (~> 1.10)
197
+ parser (>= 3.1.0.0)
198
+ rainbow (>= 2.2.2, < 4.0)
199
+ regexp_parser (>= 1.8, < 3.0)
200
+ rexml (>= 3.2.5, < 4.0)
201
+ rubocop-ast (>= 1.18.0, < 2.0)
202
+ ruby-progressbar (~> 1.7)
203
+ unicode-display_width (>= 1.4.0, < 3.0)
204
+ rubocop-ast (1.18.0)
205
+ parser (>= 3.1.1.0)
206
+ rubocop-rails (2.14.2)
207
+ activesupport (>= 4.2.0)
208
+ rack (>= 1.1)
209
+ rubocop (>= 1.7.0, < 2.0)
210
+ rubocop-rake (0.6.0)
211
+ rubocop (~> 1.0)
212
+ rubocop-rspec (2.11.1)
213
+ rubocop (~> 1.19)
214
+ ruby-progressbar (1.11.0)
215
+ ruby2_keywords (0.0.5)
216
+ set (1.0.2)
217
+ sorted_set (1.0.3)
218
+ rbtree
219
+ set (~> 1.0)
220
+ sqlite3 (1.4.2)
221
+ strong_versions (0.4.5)
222
+ i18n (>= 0.5)
223
+ paint (~> 2.0)
224
+ strscan (3.0.3)
225
+ thor (1.2.1)
226
+ timeout (0.3.0)
227
+ tzinfo (2.0.4)
228
+ concurrent-ruby (~> 1.0)
229
+ unicode-display_width (2.1.0)
230
+ webmock (3.14.0)
231
+ addressable (>= 2.8.0)
232
+ crack (>= 0.3.2)
233
+ hashdiff (>= 0.4.0, < 2.0.0)
234
+ websocket-driver (0.7.5)
235
+ websocket-extensions (>= 0.1.0)
236
+ websocket-extensions (0.1.5)
237
+ zeitwerk (2.5.4)
238
+
239
+ PLATFORMS
240
+ x86_64-linux
241
+
242
+ DEPENDENCIES
243
+ activerecord (>= 6.0)
244
+ bunny (~> 2.19)
245
+ devpack (~> 0.4.0)
246
+ mongoid (~> 7.4)
247
+ mysql2 (~> 0.5.3)
248
+ orchestration!
249
+ pg (~> 1.3)
250
+ rails
251
+ rake (~> 13.0)
252
+ redis (~> 4.6)
253
+ rspec (~> 3.11)
254
+ rspec-its (~> 1.3)
255
+ rubocop (~> 1.28)
256
+ rubocop-rails (~> 2.14)
257
+ rubocop-rake (~> 0.6.0)
258
+ rubocop-rspec (~> 2.10)
259
+ sqlite3 (~> 1.4)
260
+ strong_versions (~> 0.4.5)
261
+ webmock (~> 3.14)
262
+
263
+ BUNDLED WITH
264
+ 2.3.14
data/README.md CHANGED
@@ -31,13 +31,13 @@ Add _Orchestration_ to your `Gemfile`:
31
31
  _Ruby 3.x_:
32
32
 
33
33
  ```ruby
34
- gem 'orchestration', '~> 0.7.0'
34
+ gem 'orchestration', '~> 0.7.3'
35
35
  ```
36
36
 
37
37
  _Ruby 2.x_:
38
38
 
39
39
  ```ruby
40
- gem 'orchestration', '~> 0.6.6'
40
+ gem 'orchestration', '~> 0.6.7'
41
41
  ```
42
42
 
43
43
  Install:
@@ -67,6 +67,7 @@ _Orchestration_ generates the following files where appropriate. Backups are cre
67
67
  * `config/database.yml`
68
68
  * `config/mongoid.yml`
69
69
  * `config/rabbitmq.yml` (see [RabbitMQ Configuration](#rabbitmq-configuration) for more details)
70
+ * `config/redis.yml` (see [Redis Configuration](#redis-configuration) for more details)
70
71
  * `config/unicorn.rb`
71
72
  * `config/puma.rb`
72
73
 
@@ -396,13 +397,6 @@ make stop RAILS_ENV=test
396
397
  <a name="rabbitmq-configuration"></a>
397
398
  ## RabbitMQ Configuration
398
399
 
399
- The [Bunny](https://github.com/ruby-amqp/bunny) _RabbitMQ_ gem does not recognise `config/rabbitmq.yml` or `RABBITMQ_URL`. If your application uses _RabbitMQ_ then you must manually update your code to reference this file, e.g.:
400
-
401
- ```ruby
402
- connection = Bunny.new(config_for(:rabbit_mq)['url'])
403
- connection.start
404
- ```
405
-
406
400
  _Orchestration_ generates the following `config/rabbitmq.yml`:
407
401
 
408
402
  ```
@@ -419,10 +413,42 @@ production:
419
413
  management_url: <%= ENV['RABBITMQ_MANAGEMENT_URL'] %>
420
414
  ```
421
415
 
416
+ The [Bunny](https://github.com/ruby-amqp/bunny) _RabbitMQ_ gem does not recognise `config/rabbitmq.yml` or `RABBITMQ_URL`. If your application uses _RabbitMQ_ then you must manually update your code to reference this file, e.g.:
417
+
418
+ ```ruby
419
+ connection = Bunny.new(Rails.application.config_for(:rabbit_mq)['url'])
420
+ connection.start
421
+ ```
422
+
422
423
  Using this approach, the environment variable `RABBITMQ_URL` can be used to configure _Bunny_ in production (similar to `DATABASE_URL` and `MONGO_URL`).
423
424
 
424
425
  This is a convention of the _Orchestration_ gem intended to make _RabbitMQ_ configuration consistent with other services.
425
426
 
427
+ <a name="redis-configuration"></a>
428
+ ## Redis Configuration
429
+
430
+ _Orchestration_ generates the following `config/redis.yml`:
431
+
432
+ ```
433
+ development:
434
+ url: redis://127.0.0.1:51071
435
+
436
+ test:
437
+ url: redis://127.0.0.1:51069
438
+ ```
439
+
440
+ The [Redis](https://github.com/redis/redis-rb) gem does not recognise `config/redis.yml`. If your application uses _Redis_ then you must manually update your code to reference this file, e.g.:
441
+
442
+ ```ruby
443
+ # config/initializers/redis.rb
444
+
445
+ ENV['REDIS_URL'] ||= Rails.application.config_for(:redis)['url']
446
+ ```
447
+ _Redis_ will then use `REDIS_URL` for all connections.
448
+
449
+ This allows `development` and `test` environments to auto-load the correct config for the relevant containers while also allowing `production` to use either the auto-generated _Redis_ service or an external _Redis_ instance.
450
+
451
+
426
452
  ## Alternate Database Configuration Files
427
453
 
428
454
  If you have multiple databases configured in various `config/database.*.yml` files then the `make wait` command will automatically detect database configurations.
@@ -2,6 +2,7 @@
2
2
 
3
3
  module Orchestration
4
4
  module DockerCompose
5
+ # rubocop:disable Metrics/ClassLength
5
6
  class AppService
6
7
  include ComposeHelpers
7
8
 
@@ -99,13 +100,19 @@ module Orchestration
99
100
  'WEB_HEALTHCHECK_PATH' => '/healthcheck',
100
101
  'WEB_PORT' => 8080,
101
102
  'DATABASE_URL' => database_url
102
- }.merge(inherited_environment.to_h { |key| [key, nil] }).merge(rabbitmq_urls)
103
+ }.merge(inherited_environment.to_h { |key| [key, nil] }).merge(rabbitmq_urls).merge(redis_url)
103
104
  end
104
105
 
105
106
  def rabbitmq_urls
106
107
  return {} unless Services::RabbitMQ::Configuration.new(Environment.new).enabled?
107
108
 
108
- { 'RABBITMQ_URL' => 'amqp://rabbitmq:5672', 'RABBITMQ_MANAGEMENT_URL' => 'http://rabbitmq:15672' }
109
+ { 'RABBITMQ_URL' => 'amqp://rabbitmq-local:5672', 'RABBITMQ_MANAGEMENT_URL' => 'http://rabbitmq-local:15672' }
110
+ end
111
+
112
+ def redis_url
113
+ return {} unless Services::Redis::Configuration.new(Environment.new).enabled?
114
+
115
+ { 'REDIS_URL' => "redis://redis-local:#{Services::Redis::PORT}" }
109
116
  end
110
117
 
111
118
  def database_url
@@ -124,5 +131,6 @@ module Orchestration
124
131
  ['${PUBLISH_PORT:?PUBLISH_PORT must be provided}:8080']
125
132
  end
126
133
  end
134
+ # rubocop:enable Metrics/ClassLength
127
135
  end
128
136
  end
@@ -39,7 +39,7 @@ module Orchestration
39
39
  return nil unless listener?(name)
40
40
  return ports(name).first[:local].to_i if remote_port.nil?
41
41
 
42
- ports(name).find { |mapping| mapping[:remote] == remote_port }
42
+ ports(name).find { |mapping| mapping[:remote].to_i == remote_port.to_i }
43
43
  .fetch(:local)
44
44
  .to_i
45
45
  rescue NoMethodError
@@ -32,7 +32,8 @@ module Orchestration
32
32
  app: AppService,
33
33
  database: DatabaseService,
34
34
  mongo: MongoService,
35
- rabbitmq: RabbitMQService
35
+ rabbitmq: RabbitMQService,
36
+ redis: RedisService
36
37
  }
37
38
  end
38
39
 
@@ -67,9 +67,9 @@ module Orchestration
67
67
  def service_names(environment)
68
68
  case environment
69
69
  when :test, :development
70
- %i[database mongo rabbitmq]
70
+ %i[database mongo rabbitmq redis]
71
71
  when :deployment
72
- %i[app database mongo rabbitmq]
72
+ %i[app database mongo rabbitmq redis]
73
73
  when :local, nil
74
74
  []
75
75
  else
@@ -88,7 +88,8 @@ module Orchestration
88
88
  app: Orchestration::Services::App::Configuration,
89
89
  database: Orchestration::Services::Database::Configuration,
90
90
  mongo: Orchestration::Services::Mongo::Configuration,
91
- rabbitmq: Orchestration::Services::RabbitMQ::Configuration
91
+ rabbitmq: Orchestration::Services::RabbitMQ::Configuration,
92
+ redis: Orchestration::Services::Redis::Configuration
92
93
  }.fetch(service).new(@env)
93
94
  end
94
95
 
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Orchestration
4
+ module DockerCompose
5
+ class RedisService
6
+ include ComposeHelpers
7
+
8
+ def initialize(config, environment)
9
+ @config = config
10
+ @environment = environment
11
+ end
12
+
13
+ def definition
14
+ return nil unless @config.enabled?
15
+
16
+ { 'image' => 'library/redis:7.0', 'networks' => networks }.merge(ports)
17
+ end
18
+
19
+ def ports
20
+ return {} unless %i[development test].include?(@environment)
21
+
22
+ container_port = Orchestration::Services::Redis::PORT
23
+
24
+ { 'ports' => ["#{sidecar_port(@environment)}#{container_port}"] }
25
+ end
26
+ end
27
+ end
28
+ end
@@ -14,3 +14,4 @@ require 'orchestration/docker_compose/app_service'
14
14
  require 'orchestration/docker_compose/database_service'
15
15
  require 'orchestration/docker_compose/mongo_service'
16
16
  require 'orchestration/docker_compose/rabbitmq_service'
17
+ require 'orchestration/docker_compose/redis_service'
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Orchestration
4
+ # rubocop:disable Metrics/ClassLength
4
5
  class Environment
5
6
  def initialize(options = {})
6
7
  @environment = options.fetch(:environment, nil)
@@ -44,6 +45,10 @@ module Orchestration
44
45
  root.join('config', 'rabbitmq.yml')
45
46
  end
46
47
 
48
+ def redis_configuration_path
49
+ root.join('config', 'redis.yml')
50
+ end
51
+
47
52
  def orchestration_configuration_path
48
53
  root.join('.orchestration.yml')
49
54
  end
@@ -136,4 +141,5 @@ module Orchestration
136
141
  end.join
137
142
  end
138
143
  end
144
+ # rubocop:enable Metrics/ClassLength
139
145
  end
@@ -72,7 +72,7 @@ module Orchestration
72
72
  end
73
73
 
74
74
  def database_yml
75
- return unless defined?(ActiveRecord)
75
+ return unless defined?(::ActiveRecord)
76
76
 
77
77
  adapter = DockerCompose::ComposeConfiguration.database_adapter_name
78
78
  return if adapter == 'sqlite3'
@@ -81,17 +81,23 @@ module Orchestration
81
81
  end
82
82
 
83
83
  def mongoid_yml
84
- return unless defined?(Mongoid)
84
+ return unless defined?(::Mongoid)
85
85
 
86
86
  service_config('mongoid.yml', Services::Mongo::Configuration)
87
87
  end
88
88
 
89
89
  def rabbitmq_yml
90
- return unless defined?(Bunny)
90
+ return unless defined?(::Bunny)
91
91
 
92
92
  service_config('rabbitmq.yml', Services::RabbitMQ::Configuration)
93
93
  end
94
94
 
95
+ def redis_yml
96
+ return unless defined?(::Redis)
97
+
98
+ service_config('redis.yml', Services::Redis::Configuration)
99
+ end
100
+
95
101
  def env
96
102
  simple_copy('env', @env.root.join('.env'), overwrite: false)
97
103
  end
@@ -107,7 +107,9 @@ endif
107
107
  ifneq (${env},test)
108
108
  ifeq (,$(findstring test,$(MAKECMDGOALS)))
109
109
  ifeq (,$(findstring deploy,$(MAKECMDGOALS)))
110
- -include ${env_path}
110
+ ifeq (,$(findstring setup,$(MAKECMDGOALS)))
111
+ -include ${env_path}
112
+ endif
111
113
  endif
112
114
  endif
113
115
  endif
@@ -122,7 +124,9 @@ ifneq (,$(findstring test,$(MAKECMDGOALS)))
122
124
  env=test
123
125
  endif
124
126
 
125
- ifneq (,$(env))
127
+ ifneq (,$(RAILS_ENV))
128
+ env=$(RAILS_ENV)
129
+ else ifneq (,$(env))
126
130
  # `env` set by current shell.
127
131
  else ifneq (,$(RAILS_ENV))
128
132
  env=$(RAILS_ENV)
@@ -216,11 +220,16 @@ all: build
216
220
 
217
221
  ### Container management commands ###
218
222
 
223
+ .PHONY: pull
224
+ pull:
225
+ @$(call system,${compose_human} pull)
226
+ @${compose} pull
227
+
219
228
  .PHONY: start
220
229
  ifndef network
221
230
  start: network := ${compose_project_name}
222
231
  endif
223
- start: _create-log-directory _clean-logs
232
+ start: _create-log-directory _clean-logs pull
224
233
  ifneq (,${compose_services})
225
234
  @$(call system,${compose_human} up --detach)
226
235
  ifeq (${env},$(filter ${env},test development))
@@ -312,8 +321,8 @@ setup: _log-notify
312
321
  @$(call make,start env=${env})
313
322
  ifneq (,$(wildcard config/database.yml))
314
323
  @$(call echo,Preparing ${env_human} database)
315
- @$(call system,rake db:create RAILS_ENV="${env}")
316
- @${rake} db:create RAILS_ENV=${env} ${log} || : ${log}
324
+ @$(call system,rake db:create RAILS_ENV="${env}" DATABASE_URL='${url}')
325
+ @${rake} db:create RAILS_ENV=${env} DATABASE_URL='${url}' ${log} || : ${log}
317
326
  ifneq (,$(wildcard db/structure.sql))
318
327
  @$(call system,rake db:structure:load RAILS_ENV="${env}" DATABASE_URL="${url}")
319
328
  @${rake} db:structure:load RAILS_ENV="${env}" DATABASE_URL='${url}' ${log} || ${exit_fail}
@@ -322,7 +331,7 @@ ifneq (,$(wildcard config/database.yml))
322
331
  @${rake} db:schema:load RAILS_ENV="${env}" DATABASE_URL='${url}' ${log} || ${exit_fail}
323
332
  endif
324
333
  @$(call system,rake db:migrate RAILS_ENV="${env}" DATABASE_URL="${url}")
325
- @${rake} db:migrate RAILS_ENV=${env} ${log} || ${exit_fail}
334
+ @${rake} db:migrate RAILS_ENV="${env}" DATABASE_URL='${url}' ${log} || ${exit_fail}
326
335
  endif
327
336
  @if $(MAKE) -n post-setup >/dev/null 2>&1; then \
328
337
  $(call system,make post-setup RAILS_ENV="${env}") \
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Orchestration
4
+ module Services
5
+ module Redis
6
+ class Configuration
7
+ include ConfigurationBase
8
+
9
+ self.service_name = 'redis'
10
+
11
+ def enabled?
12
+ defined?(::Redis)
13
+ end
14
+
15
+ def friendly_config
16
+ "[redis] redis://#{host}:#{port}"
17
+ end
18
+
19
+ def host
20
+ from_url['host'] || super
21
+ end
22
+
23
+ def port
24
+ from_url['port'] || super
25
+ end
26
+
27
+ private
28
+
29
+ def from_url
30
+ return {} if @env.redis_url.nil?
31
+
32
+ uri = URI.parse(@env.redis_url)
33
+ { 'host' => uri.host, 'port' => uri.port || PORT }
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Orchestration
4
+ module Services
5
+ module Redis
6
+ class Healthcheck
7
+ class NotConnectedError < OrchestrationError; end
8
+
9
+ include HealthcheckBase
10
+
11
+ dependencies 'redis'
12
+
13
+ def connection_errors
14
+ [NotConnectedError]
15
+ end
16
+
17
+ def connect
18
+ host = @configuration.host
19
+ port = @configuration.port
20
+ return if ::Redis.new(url: "redis://#{host}:#{port}").connected?
21
+
22
+ raise NotConnectedError
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Orchestration
4
+ module Services
5
+ module Redis
6
+ PORT = 6379
7
+ end
8
+ end
9
+ end
10
+
11
+ require 'orchestration/services/redis/configuration'
12
+ require 'orchestration/services/redis/healthcheck'
@@ -14,3 +14,4 @@ require 'orchestration/services/database'
14
14
  require 'orchestration/services/listener'
15
15
  require 'orchestration/services/mongo'
16
16
  require 'orchestration/services/rabbitmq'
17
+ require 'orchestration/services/redis'
@@ -1,8 +1,8 @@
1
- environment ENV.fetch('RAILS_ENV') { 'development' }
1
+ environment ENV.fetch('RAILS_ENV', 'development')
2
2
 
3
- port ENV.fetch('WEB_PORT') { 3000 }
4
- workers ENV.fetch('WEB_CONCURRENCY') { 4 }
5
- threads_count = ENV.fetch('RAILS_MAX_THREADS') { 8 }
3
+ port ENV.fetch('WEB_PORT', 3000)
4
+ workers ENV.fetch('WEB_CONCURRENCY', 4)
5
+ threads_count = ENV.fetch('RAILS_MAX_THREADS', 8)
6
6
 
7
7
  pidfile './tmp/pids/server.pid'
8
8
  threads threads_count, threads_count
@@ -12,4 +12,4 @@ test:
12
12
 
13
13
  production:
14
14
  url: <%%= ENV['RABBITMQ_URL'] %>
15
- url: <%%= ENV['RABBITMQ_MANAGEMENT_URL'] %>
15
+ management_url: <%%= ENV['RABBITMQ_MANAGEMENT_URL'] %>
@@ -0,0 +1,9 @@
1
+ <% if compose.call('development').services.key?('redis') %>
2
+ development:
3
+ url: <%= "#{'<' + '%' + '='} ENV.fetch('REDIS_URL', 'redis://127.0.0.1:#{compose.call('development').local_port('redis', 6379)}') #{'%' + '>'}" %>
4
+ <% end %>
5
+
6
+ <% if compose.call('test').services.key?('redis') %>
7
+ test:
8
+ url: <%= "#{'<' + '%' + '='} ENV.fetch('REDIS_URL', 'redis://127.0.0.1:#{compose.call('test').local_port('redis', 6379)}') #{'%' + '>'}" %>
9
+ <% end %>
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Orchestration
4
- VERSION = '0.7.0'
4
+ VERSION = '0.7.3'
5
5
  end
@@ -110,6 +110,9 @@ post-setup:
110
110
  namespace :db do
111
111
  desc I18n.t('orchestration.rake.db.url')
112
112
  task :url do
113
+ ENV['DATABASE_URL'] = nil
114
+ ENV['DEVELOPMENT_DATABASE_URL'] = nil
115
+ ENV['TEST_DATABASE_URL'] = nil
113
116
  config = Rails.application.config_for(:database).transform_keys(&:to_sym)
114
117
 
115
118
  if config[:adapter] == 'sqlite3'
@@ -42,6 +42,7 @@ Gem::Specification.new do |spec|
42
42
  spec.add_development_dependency 'pg', '~> 1.3'
43
43
  spec.add_development_dependency 'rails'
44
44
  spec.add_development_dependency 'rake', '~> 13.0'
45
+ spec.add_development_dependency 'redis', '~> 4.6'
45
46
  spec.add_development_dependency 'rspec', '~> 3.11'
46
47
  spec.add_development_dependency 'rspec-its', '~> 1.3'
47
48
  spec.add_development_dependency 'rubocop', '~> 1.28'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: orchestration
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bob Farrell
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-01 00:00:00.000000000 Z
11
+ date: 2022-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: database_url
@@ -206,6 +206,20 @@ dependencies:
206
206
  - - "~>"
207
207
  - !ruby/object:Gem::Version
208
208
  version: '13.0'
209
+ - !ruby/object:Gem::Dependency
210
+ name: redis
211
+ requirement: !ruby/object:Gem::Requirement
212
+ requirements:
213
+ - - "~>"
214
+ - !ruby/object:Gem::Version
215
+ version: '4.6'
216
+ type: :development
217
+ prerelease: false
218
+ version_requirements: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - "~>"
221
+ - !ruby/object:Gem::Version
222
+ version: '4.6'
209
223
  - !ruby/object:Gem::Dependency
210
224
  name: rspec
211
225
  requirement: !ruby/object:Gem::Requirement
@@ -342,9 +356,11 @@ files:
342
356
  - ".gitignore"
343
357
  - ".rspec"
344
358
  - ".rubocop.yml"
359
+ - ".ruby-version"
345
360
  - ".strong_versions.yml"
346
361
  - ".travis.yml"
347
362
  - Gemfile
363
+ - Gemfile.lock
348
364
  - LICENSE
349
365
  - Makefile
350
366
  - README.md
@@ -365,6 +381,7 @@ files:
365
381
  - lib/orchestration/docker_compose/install_generator.rb
366
382
  - lib/orchestration/docker_compose/mongo_service.rb
367
383
  - lib/orchestration/docker_compose/rabbitmq_service.rb
384
+ - lib/orchestration/docker_compose/redis_service.rb
368
385
  - lib/orchestration/docker_healthcheck.rb
369
386
  - lib/orchestration/environment.rb
370
387
  - lib/orchestration/errors.rb
@@ -398,6 +415,9 @@ files:
398
415
  - lib/orchestration/services/rabbitmq.rb
399
416
  - lib/orchestration/services/rabbitmq/configuration.rb
400
417
  - lib/orchestration/services/rabbitmq/healthcheck.rb
418
+ - lib/orchestration/services/redis.rb
419
+ - lib/orchestration/services/redis/configuration.rb
420
+ - lib/orchestration/services/redis/healthcheck.rb
401
421
  - lib/orchestration/settings.rb
402
422
  - lib/orchestration/templates/Dockerfile.erb
403
423
  - lib/orchestration/templates/application.mk.erb
@@ -407,6 +427,7 @@ files:
407
427
  - lib/orchestration/templates/mongoid.yml.erb
408
428
  - lib/orchestration/templates/puma.rb.erb
409
429
  - lib/orchestration/templates/rabbitmq.yml.erb
430
+ - lib/orchestration/templates/redis.yml.erb
410
431
  - lib/orchestration/templates/unicorn.rb.erb
411
432
  - lib/orchestration/terminal.rb
412
433
  - lib/orchestration/version.rb