elastic-apm 3.1.0 → 3.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: