elastic-apm 3.1.0 → 3.2.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.
Files changed (67) hide show
  1. checksums.yaml +4 -4
  2. data/.ci/.jenkins_exclude.yml +47 -0
  3. data/.ci/.jenkins_framework.yml +4 -0
  4. data/.ci/.jenkins_master_framework.yml +1 -0
  5. data/.ci/.jenkins_ruby.yml +1 -0
  6. data/.ci/downstreamTests.groovy +1 -1
  7. data/.gitignore +2 -1
  8. data/.rspec +1 -0
  9. data/CHANGELOG.asciidoc +24 -0
  10. data/Dockerfile +43 -0
  11. data/Gemfile +34 -15
  12. data/README.md +30 -1
  13. data/bin/dev +54 -0
  14. data/bin/run-tests +27 -0
  15. data/docker-compose.yml +32 -0
  16. data/docs/api.asciidoc +13 -2
  17. data/docs/configuration.asciidoc +30 -0
  18. data/docs/getting-started-rack.asciidoc +24 -0
  19. data/docs/release-notes.asciidoc +1 -1
  20. data/lib/elastic_apm.rb +12 -1
  21. data/lib/elastic_apm/agent.rb +15 -3
  22. data/lib/elastic_apm/central_config.rb +39 -19
  23. data/lib/elastic_apm/child_durations.rb +42 -0
  24. data/lib/elastic_apm/config.rb +27 -11
  25. data/lib/elastic_apm/context/request/socket.rb +1 -1
  26. data/lib/elastic_apm/context_builder.rb +1 -1
  27. data/lib/elastic_apm/error.rb +10 -0
  28. data/lib/elastic_apm/error/exception.rb +7 -0
  29. data/lib/elastic_apm/grape.rb +48 -0
  30. data/lib/elastic_apm/instrumenter.rb +77 -4
  31. data/lib/elastic_apm/logging.rb +0 -2
  32. data/lib/elastic_apm/metrics.rb +39 -26
  33. data/lib/elastic_apm/metrics/breakdown_set.rb +14 -0
  34. data/lib/elastic_apm/metrics/{cpu_mem.rb → cpu_mem_set.rb} +62 -54
  35. data/lib/elastic_apm/metrics/metric.rb +117 -0
  36. data/lib/elastic_apm/metrics/set.rb +106 -0
  37. data/lib/elastic_apm/metrics/span_scoped_set.rb +39 -0
  38. data/lib/elastic_apm/metrics/transaction_set.rb +11 -0
  39. data/lib/elastic_apm/metrics/vm_set.rb +44 -0
  40. data/lib/elastic_apm/metricset.rb +31 -4
  41. data/lib/elastic_apm/normalizers.rb +6 -0
  42. data/lib/elastic_apm/normalizers/grape.rb +5 -0
  43. data/lib/elastic_apm/normalizers/grape/endpoint_run.rb +47 -0
  44. data/lib/elastic_apm/normalizers/rails/active_record.rb +16 -5
  45. data/lib/elastic_apm/opentracing.rb +4 -4
  46. data/lib/elastic_apm/rails.rb +12 -2
  47. data/lib/elastic_apm/railtie.rb +1 -5
  48. data/lib/elastic_apm/sinatra.rb +1 -1
  49. data/lib/elastic_apm/span.rb +15 -10
  50. data/lib/elastic_apm/spies.rb +0 -1
  51. data/lib/elastic_apm/sql_summarizer.rb +8 -6
  52. data/lib/elastic_apm/subscriber.rb +4 -1
  53. data/lib/elastic_apm/transaction.rb +6 -6
  54. data/lib/elastic_apm/transport/base.rb +7 -0
  55. data/lib/elastic_apm/transport/connection.rb +11 -69
  56. data/lib/elastic_apm/transport/connection/http.rb +43 -35
  57. data/lib/elastic_apm/transport/connection/proxy_pipe.rb +0 -3
  58. data/lib/elastic_apm/transport/headers.rb +62 -0
  59. data/lib/elastic_apm/transport/serializers.rb +0 -2
  60. data/lib/elastic_apm/transport/serializers/metricset_serializer.rb +19 -6
  61. data/lib/elastic_apm/transport/serializers/span_serializer.rb +3 -3
  62. data/lib/elastic_apm/transport/user_agent.rb +31 -0
  63. data/lib/elastic_apm/transport/worker.rb +1 -2
  64. data/lib/elastic_apm/version.rb +1 -1
  65. metadata +20 -6
  66. data/lib/elastic_apm/metrics/vm.rb +0 -60
  67. data/lib/elastic_apm/util/prefixed_logger.rb +0 -18
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 123006390aa4ec1e409d45dfb91547a6f724c65e054b68278c93d2658dbc39fc
4
- data.tar.gz: 38961a4b6606f592cf32ed7298d302beaa19673c4409f9561dbba5f468fad5da
3
+ metadata.gz: d6058bb61034dc14b1b22a3a5f45a592721b968d314bb5f63ca171c600bbb1bc
4
+ data.tar.gz: fffcd9160ec251a5ad51aae149dbfc3f50cf16b3fc866385f24f83f555b8b804
5
5
  SHA512:
6
- metadata.gz: 956689269daf15587d89a0f578fd7ddff3f05536f8fd98a758978a8d50d8cfabd0ddd6908c9d7ba8c76418f6df9542f0d7d1278f95cd809d5026320e696bd45b
7
- data.tar.gz: 9f866f05c3e0d8b43ffcdc31f54665db68a239abf5915b2913dca74154f7a1f91c50b3dbacb7eeee97a90a64584973c796b105c37ae442fa5d21ae47cbabf73d
6
+ metadata.gz: f7a8bd72f34f7158619c124e4eff24c9b5d57e68c3b5761b1a6305e632f3aff549be7ed37924775d8ad61119f99a87081567969c0e386641b8789662ff3f54ca
7
+ data.tar.gz: a8ce8dc0c3a3def4e08ca68b33d73c288bb6ca1fe6a6ff5fd0bbfe5e03f695848855c91b024e28e2ad0872895afa5659c8ff07f06b16277ea9755c0598d711b9
@@ -4,6 +4,8 @@ exclude:
4
4
  FRAMEWORK: rails-4.2
5
5
  - RUBY_VERSION: jruby:9.1
6
6
  FRAMEWORK: rails-4.2
7
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-13-jdk
8
+ FRAMEWORK: rails-4.2
7
9
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-12-jdk
8
10
  FRAMEWORK: rails-4.2
9
11
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-11-jdk
@@ -33,6 +35,8 @@ exclude:
33
35
  FRAMEWORK: rails-master
34
36
  - RUBY_VERSION: jruby:9.1
35
37
  FRAMEWORK: rails-master
38
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-13-jdk
39
+ FRAMEWORK: rails-master
36
40
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-12-jdk
37
41
  FRAMEWORK: rails-master
38
42
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-11-jdk
@@ -52,6 +56,8 @@ exclude:
52
56
  FRAMEWORK: sinatra-master
53
57
  - RUBY_VERSION: jruby:9.1
54
58
  FRAMEWORK: sinatra-master
59
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-13-jdk
60
+ FRAMEWORK: sinatra-master
55
61
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-12-jdk
56
62
  FRAMEWORK: sinatra-master
57
63
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-11-jdk
@@ -61,3 +67,44 @@ exclude:
61
67
  - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.1-7-jdk
62
68
  FRAMEWORK: sinatra-master
63
69
 
70
+ - RUBY_VERSION: ruby:2.5
71
+ FRAMEWORK: grape-master
72
+ - RUBY_VERSION: ruby:2.4
73
+ FRAMEWORK: grape-master
74
+ - RUBY_VERSION: ruby:2.3
75
+ FRAMEWORK: grape-master
76
+ - RUBY_VERSION: jruby:9.2
77
+ FRAMEWORK: grape-master
78
+ - RUBY_VERSION: jruby:9.1
79
+ FRAMEWORK: grape-master
80
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-13-jdk
81
+ FRAMEWORK: grape-master
82
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-12-jdk
83
+ FRAMEWORK: grape-master
84
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-11-jdk
85
+ FRAMEWORK: grape-master
86
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-8-jdk
87
+ FRAMEWORK: grape-master
88
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.1-7-jdk
89
+ FRAMEWORK: grape-master
90
+
91
+ - RUBY_VERSION: ruby:2.5
92
+ FRAMEWORK: grape-1.2,sinatra-2.0,rails-6.0
93
+ - RUBY_VERSION: ruby:2.4
94
+ FRAMEWORK: grape-1.2,sinatra-2.0,rails-6.0
95
+ - RUBY_VERSION: ruby:2.3
96
+ FRAMEWORK: grape-1.2,sinatra-2.0,rails-6.0
97
+ - RUBY_VERSION: jruby:9.2
98
+ FRAMEWORK: grape-1.2,sinatra-2.0,rails-6.0
99
+ - RUBY_VERSION: jruby:9.1
100
+ FRAMEWORK: grape-1.2,sinatra-2.0,rails-6.0
101
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-13-jdk
102
+ FRAMEWORK: grape-1.2,sinatra-2.0,rails-6.0
103
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-12-jdk
104
+ FRAMEWORK: grape-1.2,sinatra-2.0,rails-6.0
105
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-11-jdk
106
+ FRAMEWORK: grape-1.2,sinatra-2.0,rails-6.0
107
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.2-8-jdk
108
+ FRAMEWORK: grape-1.2,sinatra-2.0,rails-6.0
109
+ - RUBY_VERSION: docker.elastic.co/observability-ci/jruby:9.1-7-jdk
110
+ FRAMEWORK: grape-1.2,sinatra-2.0,rails-6.0
@@ -7,3 +7,7 @@ FRAMEWORK:
7
7
 
8
8
  - sinatra-2.0
9
9
  - sinatra-1.4
10
+
11
+ - grape-1.2
12
+
13
+ - grape-1.2,sinatra-2.0,rails-6.0
@@ -1,3 +1,4 @@
1
1
  FRAMEWORK:
2
2
  - rails-master
3
3
  - sinatra-master
4
+ - grape-master
@@ -5,6 +5,7 @@ RUBY_VERSION:
5
5
  - ruby:2.3
6
6
  - jruby:9.2
7
7
  - jruby:9.1
8
+ - docker.elastic.co/observability-ci/jruby:9.2-13-jdk
8
9
  - docker.elastic.co/observability-ci/jruby:9.2-12-jdk
9
10
  - docker.elastic.co/observability-ci/jruby:9.2-11-jdk
10
11
  - docker.elastic.co/observability-ci/jruby:9.2-8-jdk
@@ -117,7 +117,7 @@ class RubyParallelTaskGenerator extends DefaultParallelTaskGenerator {
117
117
  } finally {
118
118
  steps.junit(allowEmptyResults: true,
119
119
  keepLongStdio: true,
120
- testResults: "**/spec/ruby-agent-junit.xml")
120
+ testResults: "**/spec/junit-reports/**/ruby-agent-junit.xml")
121
121
  if (steps.isCodecovEnabled(x, y)) {
122
122
  steps.codecov(repo: "${steps.env.REPO}", basedir: "${steps.env.BASE_DIR}",
123
123
  secret: "${steps.env.CODECOV_SECRET}")
data/.gitignore CHANGED
@@ -13,6 +13,7 @@
13
13
  Gemfile.lock
14
14
  /html_docs/
15
15
  spec/elastic_apm.log
16
- spec/ruby-agent-junit.xml
16
+ spec/junit-reports
17
17
  .gem
18
18
  *.bulk
19
+ vendor/
data/.rspec CHANGED
@@ -1,2 +1,3 @@
1
1
  --color
2
2
  --require spec_helper
3
+ --exclude-pattern spec/integration/**/*_spec.rb
@@ -28,6 +28,30 @@ endif::[]
28
28
  - Fix {pull}2526[#2526]
29
29
  ////
30
30
 
31
+ [[release-notes-3.x]]
32
+ === Ruby Agent version 3.x
33
+
34
+ [[release-notes-3.2.0]]
35
+ ==== 3.2.0 (2019-11-19)
36
+
37
+ [float]
38
+ ===== Added
39
+
40
+ - Add Grape support. {pull}562[#562]
41
+ - Add Breakdown Metrics {pull}526[#526]
42
+
43
+ [float]
44
+ ===== Changes
45
+
46
+ - Set remote_addr to immediate socket {pull}615[#615]
47
+
48
+ [float]
49
+ ===== Fixed
50
+
51
+ - Fixed pulling config from Kibana {pull}594[#594]
52
+ - Fixed a bug where the agent would alter the original cookies hash {pull}616[#616]
53
+
54
+
31
55
  [[release-notes-3.x]]
32
56
  === Ruby Agent version 3.x
33
57
 
@@ -0,0 +1,43 @@
1
+ ARG RUBY_IMAGE
2
+ FROM ${RUBY_IMAGE}
3
+
4
+ ARG USER_ID_GROUP
5
+ ARG FRAMEWORKS
6
+ ARG VENDOR_PATH
7
+ ARG BUNDLER_VERSION
8
+
9
+ # For tzdata
10
+ # ENV DEBIAN_FRONTEND=noninteractive
11
+
12
+ RUN apt-get update -qq \
13
+ && apt-get install -qq -y --no-install-recommends \
14
+ build-essential libpq-dev git \
15
+ && rm -rf /var/lib/apt/lists/*
16
+
17
+ # Configure bundler and PATH
18
+ ENV LANG=C.UTF-8
19
+
20
+ ENV GEM_HOME=$VENDOR_PATH
21
+ ENV BUNDLE_PATH=$GEM_HOME \
22
+ BUNDLE_JOBS=4 BUNDLE_RETRY=3
23
+ ENV BUNDLE_APP_CONFIG=$BUNDLE_PATH \
24
+ BUNDLE_BIN=$BUNDLE_PATH/bin
25
+ ENV PATH=/app/bin:$BUNDLE_BIN:$PATH
26
+
27
+ ENV FRAMEWORKS $FRAMEWORKS
28
+
29
+ RUN mkdir -p $VENDOR_PATH \
30
+ && chown -R $USER_ID_GROUP $VENDOR_PATH
31
+
32
+ USER $USER_ID_GROUP
33
+
34
+ # Upgrade RubyGems and install required Bundler version
35
+ RUN gem update --system && \
36
+ gem install bundler:$BUNDLER_VERSION
37
+
38
+ # Use unpatched, system version for more speed over less security
39
+ RUN gem install nokogiri -- --use-system-libraries
40
+ # Rake is required to build http-parser on some jruby images
41
+ RUN gem install rake
42
+
43
+ WORKDIR /app
data/Gemfile CHANGED
@@ -4,15 +4,17 @@ source 'https://rubygems.org'
4
4
 
5
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
6
 
7
- gemspec
8
-
7
+ # Tools
8
+ gem 'bootsnap', require: false
9
+ gem 'pry'
9
10
  gem 'rack-test'
10
- gem 'rspec'
11
+ gem 'rspec', '~> 3'
11
12
  gem 'rspec-its'
12
13
  gem 'rubocop', require: nil
13
14
  gem 'timecop'
14
15
  gem 'webmock'
15
16
 
17
+ # Integrations
16
18
  gem 'elasticsearch', require: nil
17
19
  gem 'fakeredis', require: nil
18
20
  gem 'faraday', require: nil
@@ -28,30 +30,47 @@ gem 'yard', require: nil
28
30
  gem 'yarjuf'
29
31
 
30
32
  if RUBY_PLATFORM == 'java'
33
+ gem 'activerecord-jdbcsqlite3-adapter'
31
34
  gem 'jdbc-sqlite3'
32
35
  else
33
36
  gem 'sqlite3'
34
37
  end
35
38
 
36
- framework, *version = ENV.fetch('FRAMEWORK', 'rails').split('-')
37
- version = version.join('-')
39
+ ## Install Framework
40
+ GITHUB_REPOS = {
41
+ 'grape' => 'ruby-grape/grape',
42
+ 'rails' => 'rails/rails',
43
+ 'sinatra' => 'sinatra/sinatra'
44
+ }.freeze
38
45
 
39
- case version
40
- when 'master'
41
- gem framework, github: "#{framework}/#{framework}"
42
- when /.+/
43
- gem framework, "~> #{version}.0"
44
- else
45
- gem framework
46
+ # new || legacy || default
47
+ env_frameworks = ENV['FRAMEWORKS'] || ENV['FRAMEWORK'] || ''
48
+ parsed_frameworks = env_frameworks.split(',')
49
+ frameworks_versions = parsed_frameworks.inject({}) do |frameworks, str|
50
+ framework, *version = str.split('-')
51
+ frameworks.merge(framework => version.join('-'))
46
52
  end
47
53
 
48
- gem 'activerecord-jdbcsqlite3-adapter', platform: :jruby
54
+ frameworks_versions.each do |framework, version|
55
+ case version
56
+ when 'master'
57
+ gem framework, github: GITHUB_REPOS.fetch[framework]
58
+ when /.+/
59
+ gem framework, "~> #{version}.0"
60
+ else
61
+ gem framework
62
+ end
63
+ end
49
64
 
50
- unless version =~ /^(master|6)/
51
- gem 'delayed_job', require: nil
65
+ if frameworks_versions.key?('rails')
66
+ unless frameworks_versions['rails'] =~ /^(master|6)/
67
+ gem 'delayed_job', require: nil
68
+ end
52
69
  end
53
70
 
54
71
  group :bench do
55
72
  gem 'ruby-prof', require: nil, platforms: %i[ruby]
56
73
  gem 'stackprof', require: nil, platforms: %i[ruby]
57
74
  end
75
+
76
+ gemspec
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  # elastic-apm
2
- ## Elastic APM agent for ♦️Ruby
2
+ ## Elastic APM agent for Ruby
3
3
 
4
4
  [![Jenkins](https://apm-ci.elastic.co/buildStatus/icon?job=apm-agent-ruby/apm-agent-ruby-mbp/master)](https://apm-ci.elastic.co/job/apm-agent-ruby/job/apm-agent-ruby-mbp/job/master/) [![Gem](https://img.shields.io/gem/v/elastic-apm.svg)](https://rubygems.org/gems/elastic-apm) [![codecov](https://codecov.io/gh/elastic/apm-agent-ruby/branch/master/graph/badge.svg)](https://codecov.io/gh/elastic/apm-agent-ruby)
5
5
 
@@ -35,6 +35,35 @@ The official Rubygem for [Elastic][] [APM][].
35
35
  If you find a bug, please [report an issue](https://github.com/elastic/apm-agent-ruby/issues).
36
36
  For any other assistance, please open or add to a topic on the [APM discuss forum](https://discuss.elastic.co/c/apm).
37
37
 
38
+ ## Development
39
+
40
+ A Docker based setup is provided for development.
41
+
42
+ To run all specs in the official `ruby:latest` image:
43
+
44
+ ```sh
45
+ $ bin/dev
46
+ ```
47
+
48
+ To pick a specific Ruby version, specify it with the `-i` flag:
49
+
50
+ ```sh
51
+ $ bin/dev -i jruby:9.2
52
+ ```
53
+
54
+ If the first argument is a path starting with `spec/`, the passed specs will be run. Otherwise any arguments passed will be run as a command inside the container:
55
+
56
+ ```sh
57
+ $ bin/dev -i jruby:9.2 spec/integration/rails_spec.rb # ✅
58
+ $ bin/dev -i some_custom_image bash # ✅
59
+ ```
60
+
61
+ To see all options:
62
+
63
+ ```sh
64
+ $ bin/dev -h
65
+ ```
66
+
38
67
  ## License
39
68
 
40
69
  Apache 2.0
data/bin/dev ADDED
@@ -0,0 +1,54 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require 'optparse'
5
+
6
+ options = {}
7
+ OptionParser.new do |opts|
8
+ opts.banner = 'Usage: bin/dev [options] [command]'
9
+
10
+ opts.on(
11
+ '-iIMAGE', '--image=IMAGE',
12
+ 'Specify Docker image (eg. ruby:latest)'
13
+ ) { |val| options[:image] = val }
14
+
15
+ opts.on(
16
+ '-fFRAMEWORKS', '--frameworks=FRAMEWORKS',
17
+ 'Specify frameworks to test (eg. rails:master,sinatra)'
18
+ ) { |val| options[:frameworks] = val }
19
+
20
+ opts.on(
21
+ '-s', '--skip-build',
22
+ 'Skip building image'
23
+ ) { |val| options[:skip_build] = val }
24
+ end.parse!
25
+
26
+ USER_ID_GROUP = %w[u g].map { |f| `id -#{f}`.chomp }.join(':')
27
+
28
+ RUBY_IMAGE = options.fetch(:image, 'ruby:latest')
29
+ FRAMEWORKS = options.fetch(:frameworks, 'rails,sinatra,grape')
30
+
31
+ IMAGE_PATH_SAFE = RUBY_IMAGE.gsub(':', '_')
32
+ IMAGE_NAME = "apm-agent-ruby:#{IMAGE_PATH_SAFE}"
33
+ VENDOR_PATH = "/vendor/#{IMAGE_PATH_SAFE}"
34
+
35
+ def run(cmd)
36
+ "IMAGE_NAME=#{IMAGE_NAME} #{cmd}".tap do |str|
37
+ puts str
38
+ system str
39
+ end
40
+ end
41
+
42
+ unless options[:skip_build]
43
+ run 'docker-compose build ' \
44
+ " --build-arg RUBY_IMAGE=#{RUBY_IMAGE}" \
45
+ " --build-arg USER_ID_GROUP=#{USER_ID_GROUP}" \
46
+ " --build-arg FRAMEWORKS=#{FRAMEWORKS}" \
47
+ " --build-arg VENDOR_PATH=#{VENDOR_PATH}"
48
+ exit $?.exitstatus unless $?.success?
49
+ end
50
+
51
+ run 'docker-compose run' \
52
+ " -u #{USER_ID_GROUP}" \
53
+ ' --rm' \
54
+ " specs #{ARGV.join}"
@@ -0,0 +1,27 @@
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ runRspec(){
5
+ local case=${1:-""}
6
+ local bn=${case}
7
+
8
+ if [ -n "${case}" ]; then
9
+ bn="$(basename ${case} _spec.rb)/"
10
+ fi
11
+ bundle exec rspec -f progress -f JUnit -o spec/junit-reports/${bn}ruby-agent-junit.xml ${case}
12
+ }
13
+ specific_spec=$1
14
+
15
+ if [[ $specific_spec = '' ]]; then
16
+ echo 'Running all specs, including integration'
17
+
18
+ runRspec
19
+ for i in $(find spec/integration -name '*_spec.rb')
20
+ do
21
+ runRspec "$i"
22
+ done
23
+ else
24
+ echo "Running only $specific_spec"
25
+
26
+ runRspec $1
27
+ fi
@@ -0,0 +1,32 @@
1
+ ---
2
+ version: '3.4'
3
+
4
+ services:
5
+ mongodb:
6
+ image: mongo:latest
7
+ volumes: ['mongodata:/data/db']
8
+ ports: ['27017:27017']
9
+
10
+ specs:
11
+ build:
12
+ context: .
13
+ args:
14
+ BUNDLER_VERSION: '2.0.2'
15
+ image: '$IMAGE_NAME'
16
+ environment:
17
+ HOME: '/tmp'
18
+ MONGODB_URL: 'mongodb:27017'
19
+ entrypoint:
20
+ 'spec/entrypoint.sh'
21
+ tty: true
22
+ volumes:
23
+ - .:/app:cached
24
+ - ./vendor:/vendor
25
+ tmpfs:
26
+ - /tmp:exec,mode=1777
27
+ depends_on:
28
+ - mongodb
29
+
30
+ volumes:
31
+ vendor:
32
+ mongodata: