docker_compose_env 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 11cda084bdb92a72404dc9149c5f26496c79eeef
4
+ data.tar.gz: d254e3e1f07eb0923a9d6d9aa7554ec54701d11c
5
+ SHA512:
6
+ metadata.gz: ff61e526e2b6916a7f555e9efc9b5a8913faa427519941a8dbdd49b1e336811aa3b657bfdb9e4623866426597c34d9849eb289129d0aee1233d72519eee28bf9
7
+ data.tar.gz: 54c3df068e8e335708544f08c926b57d9712e280895ccc0796352d356732a397f0690b4ce959155f44a4117b9f8bfa2e1fda38b10fc07175f4af8a10041f705a
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.rubocop.yml ADDED
@@ -0,0 +1,3 @@
1
+ Metrics/LineLength:
2
+ Max: 100
3
+
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 2.4.1
data/.travis.yml ADDED
@@ -0,0 +1,24 @@
1
+ language: ruby
2
+ sudo: required
3
+
4
+ env:
5
+ - DOCKER_COMPOSE_VERSION=1.16.1
6
+
7
+ before_install:
8
+ - docker version
9
+ - docker-compose version
10
+ - sudo apt-get update
11
+ - sudo apt-get -y -o Dpkg::Options::="--force-confnew" install docker-ce
12
+ - gem install bundler -v 1.15.4
13
+ - sudo rm /usr/local/bin/docker-compose
14
+ - curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname -s`-`uname -m` > docker-compose
15
+ - chmod +x docker-compose
16
+ - sudo mv docker-compose /usr/local/bin
17
+ - docker version
18
+ - docker-compose version
19
+
20
+ rvm:
21
+ - 2.4.1
22
+
23
+ services:
24
+ - docker
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ gemspec name: 'docker_compose_env'
6
+ gemspec name: 'docker_compose_env_rails'
data/LICENSE ADDED
@@ -0,0 +1,23 @@
1
+
2
+ Copyright (c) 2017 Jonathan Knapp
3
+
4
+ MIT License
5
+
6
+ Permission is hereby granted, free of charge, to any person obtaining
7
+ a copy of this software and associated documentation files (the
8
+ "Software"), to deal in the Software without restriction, including
9
+ without limitation the rights to use, copy, modify, merge, publish,
10
+ distribute, sublicense, and/or sell copies of the Software, and to
11
+ permit persons to whom the Software is furnished to do so, subject to
12
+ the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
21
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
22
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
23
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,114 @@
1
+ # DockerComposeEnv
2
+
3
+ Simplify configuration between Docker Compose and Ruby/Rails apps in development.
4
+
5
+ If you run Rails outside of Docker, this helps your application play be a better
6
+ first class citizen with your dev machine by utilizing dynamic port mapping in
7
+ Docker Compose services.
8
+
9
+ To read more about the problems this gem solves, check out the
10
+ [Why Does This Exist?](docs/why.md) documentation.
11
+
12
+ If your team is comfortable running Rails inside a container or you are looking
13
+ for a production solution for service discovery, this is _not_ what you want.
14
+
15
+
16
+ ## Installation / Usage
17
+
18
+ For a Rails app, add this gem to your Gemfile in the development / test groups.
19
+
20
+ ```ruby
21
+ group :development, :test do
22
+ gem 'docker_compose_env_rails'
23
+ end
24
+ ```
25
+
26
+ You will now have new `ENV` properties set from the `docker-compose.yml` file
27
+ in your project directory. The following compose config would assign
28
+ `ENV['DB_HOST']` and `ENV['DB_PORT_5432']` to the values returned
29
+ from running `docker-compose port db 5432`, the host and dynamically mapped
30
+ port assigned after you ran `docker-compose up`.
31
+
32
+ ```yaml
33
+ version: '3.3'
34
+
35
+ services:
36
+ db:
37
+ image: postgres:9.6-alpine
38
+ env_file: .env
39
+ ports:
40
+ - "5432"
41
+ ```
42
+
43
+ That means your Rails `config/database.yml` file could look like:
44
+
45
+ ```yaml
46
+ default: &default
47
+ adapter: postgresql
48
+ encoding: unicode
49
+ host: <%= ENV['DB_HOST'].to_i %>
50
+ password: example
51
+ pool: 5
52
+ port: <%= ENV['DB_PORT_5432'].to_i %>
53
+ username: postgres
54
+
55
+ development:
56
+ <<: *default
57
+ database: app
58
+
59
+ test:
60
+ <<: *default
61
+ database: app_test
62
+ ```
63
+
64
+ ### Load Faster!
65
+
66
+ If you need to load the dynamic port information faster than the
67
+ `before_configuration` call in `Railties`, you can add the `docker_compose_env`
68
+ gem higher up in the `Gemfile` and load it with a special require path:
69
+
70
+ ```ruby
71
+ gem `docker_compose_env`, require: 'docker_compose_env/now'
72
+ ```
73
+
74
+ ### Further Customization
75
+
76
+ Unfortunately, there's only so much automagic that can be done. If you need to
77
+ customize the `docker-compose.yml` file name or location, or if you'd like to
78
+ collect the dynamic information somewhere besides `ENV`, you will need to
79
+ require the `docker_compose_env` gem and set it up yourself.
80
+
81
+ ```ruby
82
+ # expects docker-compose.yml file and adds values to ENV
83
+ DockerComposeEnv.setup!
84
+
85
+ # customize docker-compose.yml path and adds values to ENV
86
+ DockerComposeEnv.setup!(file: 'docker/docker-compose.dev.yml')
87
+
88
+ # add dynamic values to custom object instead of ENV
89
+ config = {}
90
+ DockerComposeEnv.setup!(env: config)
91
+ puts config
92
+
93
+ # add dynamic values to custom object instead of ENV and custom compose path
94
+ config = {}
95
+ DockerComposeEnv.setup!(env: config, file: 'custom/path.yml')
96
+ puts config
97
+ ```
98
+
99
+
100
+ ## Development
101
+
102
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run
103
+ `rake test` to run the tests. You can also run `bin/console` for an interactive
104
+ prompt that will allow you to experiment.
105
+
106
+ To install this gem onto your local machine, run `bundle exec rake install`. To
107
+ release a new version, update the version number in `version.rb`, and then run
108
+ `bundle exec rake release`, which will create a git tag for the version, push
109
+ git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
110
+
111
+
112
+ ## Contributing
113
+
114
+ Bug reports and pull requests are welcome on GitHub at https://github.com/CoffeeAndCode/docker_compose_env.
data/Rakefile ADDED
@@ -0,0 +1,22 @@
1
+ require 'bundler/gem_helper'
2
+ require 'rake/testtask'
3
+
4
+ namespace 'docker_compose_env' do
5
+ Bundler::GemHelper.install_tasks name: 'docker_compose_env'
6
+ end
7
+
8
+ namespace 'docker_compose_env_rails' do
9
+ Bundler::GemHelper.install_tasks name: 'docker_compose_env_rails'
10
+ end
11
+
12
+ task build: ['docker_compose_env:build', 'docker_compose_env_rails:build']
13
+ task install: ['docker_compose_env:install', 'docker_compose_env_rails:install']
14
+ task release: ['docker_compose_env:release', 'docker_compose_env_rails:release']
15
+
16
+ Rake::TestTask.new(:test) do |t|
17
+ t.libs << 'test'
18
+ t.libs << 'lib'
19
+ t.test_files = FileList['test/**/*_test.rb']
20
+ end
21
+
22
+ task default: :test
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'docker_compose_env'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require 'pry'
11
+ # Pry.start
12
+
13
+ require 'irb'
14
+ IRB.start(__FILE__)
data/bin/lint ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env bash
2
+
3
+ bundle exec reek
4
+ bundle exec rubocop
data/bin/setup ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'docker_compose_env/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'docker_compose_env'
9
+ spec.version = DockerComposeEnv::VERSION
10
+ spec.authors = ['Jonathan Knapp']
11
+ spec.email = ['jon@coffeeandcode.com']
12
+
13
+ # rubocop:disable LineLength
14
+ spec.description = 'Simplify configuration between Docker Compose and Ruby/Rails apps in development.'
15
+ # rubocop:enable LineLength
16
+ spec.summary = spec.description
17
+ spec.homepage = 'https://github.com/CoffeeAndCode/docker_compose_env'
18
+ spec.license = 'MIT'
19
+
20
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
21
+ f.match(%r{^(features|spec|test)/})
22
+ end
23
+ spec.bindir = 'exe'
24
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
25
+ spec.require_paths = ['lib']
26
+
27
+ spec.add_development_dependency 'bundler', '~> 1.15'
28
+ spec.add_development_dependency 'rake', '~> 12.0'
29
+ spec.add_development_dependency 'reek'
30
+ spec.add_development_dependency 'rubocop'
31
+ spec.add_development_dependency 'minitest', '~> 5.10'
32
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require 'docker_compose_env/version'
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = 'docker_compose_env_rails'
9
+ spec.version = DockerComposeEnv::VERSION
10
+ spec.authors = ['Jonathan Knapp']
11
+ spec.email = ['jon@coffeeandcode.com']
12
+
13
+ spec.description = 'Automate docker_compose_env in Rails.'
14
+ spec.summary = spec.description
15
+ spec.homepage = 'https://github.com/CoffeeAndCode/docker_compose_env'
16
+ spec.license = 'MIT'
17
+
18
+ spec.files = `git ls-files -z`.split("\x0").reject do |f|
19
+ f.match(%r{^(features|spec|test)/})
20
+ end
21
+ spec.bindir = 'exe'
22
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
+ spec.require_paths = ['lib']
24
+
25
+ spec.add_dependency 'docker_compose_env', DockerComposeEnv::VERSION
26
+ spec.add_dependency 'railties', '>= 3.2', '< 5.2'
27
+ end
data/docs/why.md ADDED
@@ -0,0 +1,116 @@
1
+ # Why Does This Exist?
2
+
3
+ I've repeatedly ran into configuration issues integrating Docker into my team's
4
+ development environment. While I love what containers can bring to bootstrapping
5
+ a project, I'm not sold on moving my development environment into a Docker
6
+ container. That means, niceities that I could depend on (like easy mapping to
7
+ other services) falls short and I end up having to map ports to developer host
8
+ machines. This creates problems when those ports are already in use and there
9
+ was no simple solution (that I found) to address simplifying configuration.
10
+
11
+
12
+ ### The Problem
13
+
14
+ If you run your Ruby and/or Rails application outside of a Docker container,
15
+ you normally have to hardcode the port mapping to connect to services managed
16
+ by Docker Compose. For example, running a Rails application that connects with
17
+ a Postgres Docker container would include the following:
18
+
19
+ _.env_
20
+
21
+ ```bash
22
+ POSTGRES_DB=app_db_name
23
+ POSTGRES_PASSWORD=password
24
+ POSTGRES_USER=postgres
25
+ ```
26
+
27
+ _config/database.yml_
28
+
29
+ ```yaml
30
+ development: &development
31
+ adapter: postgresql
32
+ database: <%= ENV['POSTGRES_DB'] %>_dev
33
+ encoding: unicode
34
+ host: 127.0.0.1
35
+ password: <%= ENV['POSTGRES_PASSWORD'] %>
36
+ pool: 5
37
+ port: 5432
38
+ username: <%= ENV['POSTGRES_USER'] %>
39
+
40
+ test:
41
+ <<: *development
42
+ database: <%= ENV['POSTGRES_DB'] %>_test
43
+ ```
44
+
45
+ _docker-compose.yml_
46
+
47
+ ```yaml
48
+ version: '3.3'
49
+
50
+ services:
51
+ postgres:
52
+ image: postgres:9.6-alpine
53
+ env_file: .env
54
+ ports:
55
+ - "5432:5432"
56
+ ```
57
+
58
+ The good part is that this works just fine. However there are a few situations
59
+ where things start to fall down.
60
+
61
+ If you want to run your application on a machine that already has something
62
+ listening on that port, Docker Compose will be unable to map the port properly
63
+ (since it's already in use). That means if anyone has `mysql` or `postgres`
64
+ installed through Homebrew, there will need to be additional notes for them
65
+ to know how to work with your application.
66
+
67
+ If you happen to work on multiple Rails applications at the same time, you may
68
+ run into multiple projects each competing for the same local port mappings.
69
+ Solutions such as hardcoding a different port to map to per project work, but
70
+ add to the cognative overhead of working with the project.
71
+
72
+
73
+ ### The Solution
74
+
75
+ Instead of worrying about additional setup for your application, setup
76
+ Docker Compose to work with dynamic port assignments and inform your application
77
+ of the final ports to map to. This allows your configuration to look like this:
78
+
79
+ _.env_
80
+
81
+ ```bash
82
+ POSTGRES_DB=app_db_name
83
+ POSTGRES_PASSWORD=password
84
+ POSTGRES_USER=postgres
85
+ ```
86
+
87
+ _config/database.yml_
88
+
89
+ ```yaml
90
+ development: &development
91
+ adapter: postgresql
92
+ database: <%= ENV['POSTGRES_DB'] %>_dev
93
+ encoding: unicode
94
+ host: <%= ENV['POSTGRES_HOST'] %> # dynamically setup by gem (probably 0.0.0.0)
95
+ password: <%= ENV['POSTGRES_PASSWORD'] %>
96
+ pool: 5
97
+ port: <%= ENV['POSTGRES_PORT_5432'] %> # dynamically setup by gem
98
+ username: <%= ENV['POSTGRES_USER'] %>
99
+
100
+ test:
101
+ <<: *development
102
+ database: <%= ENV['POSTGRES_DB'] %>_test
103
+ ```
104
+
105
+ _docker-compose.yml_
106
+
107
+ ```yaml
108
+ version: '3.3'
109
+
110
+ services:
111
+ postgres:
112
+ image: postgres:9.6-alpine
113
+ env_file: .env
114
+ ports:
115
+ - "5432" # do not explicitly mention host port to map to
116
+ ```
@@ -0,0 +1,10 @@
1
+ # If you use gems that require environment variables to be set before they are
2
+ # loaded, then list `docker_compose_env` in the `Gemfile` before those
3
+ # other gems and require `docker_compose_env/now`.
4
+ #
5
+ # gem 'docker_compose_env', require: 'docker_compose_env/now'
6
+ # gem 'gem_that_requires_env_variables'
7
+ #
8
+
9
+ require 'docker_compose_env'
10
+ DockerComposeEnv.setup!
@@ -0,0 +1,9 @@
1
+ require 'docker_compose_env'
2
+ require 'rails'
3
+
4
+ module DockerComposeEnv
5
+ # Setup DockerComposeEnv before Rails initializers.
6
+ class Railtie < Rails::Railtie
7
+ config.before_configuration { DockerComposeEnv.setup! }
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module DockerComposeEnv
2
+ VERSION = '0.1.0'.freeze
3
+ end
@@ -0,0 +1,46 @@
1
+ require 'docker_compose_env/version'
2
+ require 'yaml'
3
+
4
+ # The main module for DockerComposeEnv, this provides a single "easy mode"
5
+ # method for setting up the environment.
6
+ module DockerComposeEnv
7
+ def self.setup!(env: ENV, file: 'docker-compose.yml')
8
+ config = YAML.safe_load(File.read(file))
9
+
10
+ config.fetch('services', {}).keys.each do |service_name|
11
+ (config['services'][service_name]['ports'] || []).each do |container_port|
12
+ if /(\d+)\/udp$/ =~ container_port
13
+ parsed_port = /(?<port>\d+)\/udp$/.match(container_port).named_captures['port']
14
+
15
+ command = "docker-compose --file=#{file} port --protocol=udp #{service_name} #{parsed_port}"
16
+ compose_port_info = `#{command}`
17
+
18
+ if (compose_port_info =~ /^0\.0\.0\.0\:\d+\s*$/) == 0
19
+ if env["#{service_name.upcase}_HOST"].nil?
20
+ env["#{service_name.upcase}_HOST"] = '0.0.0.0'
21
+ end
22
+
23
+ if env["#{service_name.upcase}_PORT_#{parsed_port}_UDP"].nil?
24
+ env["#{service_name.upcase}_PORT_#{parsed_port}_UDP"] = compose_port_info.gsub(/0\.0\.0\.0:(\d+)\s*/, '\1')
25
+ end
26
+ end
27
+ else
28
+ command = "docker-compose --file=#{file} port #{service_name} #{container_port}"
29
+ compose_port_info = `#{command}`
30
+
31
+ if (compose_port_info =~ /^0\.0\.0\.0\:\d+\s*$/) == 0
32
+ if env["#{service_name.upcase}_HOST"].nil?
33
+ env["#{service_name.upcase}_HOST"] = '0.0.0.0'
34
+ end
35
+
36
+ if env["#{service_name.upcase}_PORT_#{container_port}"].nil?
37
+ env["#{service_name.upcase}_PORT_#{container_port}"] = compose_port_info.gsub(/0\.0\.0\.0:(\d+)\s*/, '\1')
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
43
+ rescue Errno::ENOENT => exception
44
+ raise exception unless exception.message == 'No such file or directory - docker-compose'
45
+ end
46
+ end
@@ -0,0 +1 @@
1
+ require 'docker_compose_env/railtie'
metadata ADDED
@@ -0,0 +1,134 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: docker_compose_env
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jonathan Knapp
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-12-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.15'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '12.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '12.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: reek
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '5.10'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '5.10'
83
+ description: Simplify configuration between Docker Compose and Ruby/Rails apps in
84
+ development.
85
+ email:
86
+ - jon@coffeeandcode.com
87
+ executables: []
88
+ extensions: []
89
+ extra_rdoc_files: []
90
+ files:
91
+ - ".gitignore"
92
+ - ".rubocop.yml"
93
+ - ".tool-versions"
94
+ - ".travis.yml"
95
+ - Gemfile
96
+ - LICENSE
97
+ - README.md
98
+ - Rakefile
99
+ - bin/console
100
+ - bin/lint
101
+ - bin/setup
102
+ - docker_compose_env.gemspec
103
+ - docker_compose_env_rails.gemspec
104
+ - docs/why.md
105
+ - lib/docker_compose_env.rb
106
+ - lib/docker_compose_env/now.rb
107
+ - lib/docker_compose_env/railtie.rb
108
+ - lib/docker_compose_env/version.rb
109
+ - lib/docker_compose_env_rails.rb
110
+ homepage: https://github.com/CoffeeAndCode/docker_compose_env
111
+ licenses:
112
+ - MIT
113
+ metadata: {}
114
+ post_install_message:
115
+ rdoc_options: []
116
+ require_paths:
117
+ - lib
118
+ required_ruby_version: !ruby/object:Gem::Requirement
119
+ requirements:
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: '0'
123
+ required_rubygems_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: '0'
128
+ requirements: []
129
+ rubyforge_project:
130
+ rubygems_version: 2.6.13
131
+ signing_key:
132
+ specification_version: 4
133
+ summary: Simplify configuration between Docker Compose and Ruby/Rails apps in development.
134
+ test_files: []