rubydockercronbundlerwhenever

Bundler Error - Cannot Find rake-13.0.1 even though it is installed


I have a Rails import job that run as a cron job setup through the whenever gem. It was running correctly until I recently updated the app. Now we are seeing the following Error in the logs when the cron job tries to run. If I run the task manually it runs the import correctly.

/usr/local/lib/ruby/2.6.0/bundler/spec_set.rb:91:in `block in materialize': Could not find rake-13.0.1 in any of the sources (Bundler::GemNotFound)
    from /usr/local/lib/ruby/2.6.0/bundler/spec_set.rb:85:in `map!'
    from /usr/local/lib/ruby/2.6.0/bundler/spec_set.rb:85:in `materialize'
    from /usr/local/lib/ruby/2.6.0/bundler/definition.rb:170:in `specs'
    from /usr/local/lib/ruby/2.6.0/bundler/definition.rb:237:in `specs_for'
    from /usr/local/lib/ruby/2.6.0/bundler/definition.rb:226:in `requested_specs'
    from /usr/local/lib/ruby/2.6.0/bundler/runtime.rb:108:in `block in definition_method'
    from /usr/local/lib/ruby/2.6.0/bundler/runtime.rb:20:in `setup'
    from /usr/local/lib/ruby/2.6.0/bundler.rb:107:in `setup'
    from /usr/local/lib/ruby/2.6.0/bundler/setup.rb:20:in `<top (required)>'
    from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `require'
    from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:130:in `rescue in require'
    from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:34:in `require'
    from /usr/local/bundle/gems/spring-2.1.0/lib/spring/commands.rb:33:in `<module:Spring>'
    from /usr/local/bundle/gems/spring-2.1.0/lib/spring/commands.rb:4:in `<top (required)>'
    from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /usr/local/bundle/gems/spring-2.1.0/lib/spring/server.rb:9:in `<top (required)>'
    from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /usr/local/bundle/gems/spring-2.1.0/lib/spring/client/server.rb:9:in `call'
    from /usr/local/bundle/gems/spring-2.1.0/lib/spring/client/command.rb:7:in `call'
    from /usr/local/bundle/gems/spring-2.1.0/lib/spring/client.rb:30:in `run'
    from /usr/local/bundle/gems/spring-2.1.0/bin/spring:49:in `<main>'
/usr/local/lib/ruby/2.6.0/rubygems/dependency.rb:313:in `to_specs': Could not find 'bundler' () required by `$BUNDLER_VERSION`. (Gem::MissingSpecVersionError)
To update to the latest version installed on your system, run `bundle update --bundler`.
To install the missing version, run `gem install bundler:`
Checked in 'GEM_PATH=/home/sotldirectory', execute `gem env` for more information
    from /usr/local/lib/ruby/2.6.0/rubygems/dependency.rb:323:in `to_spec'
    from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_gem.rb:65:in `gem'
    from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:42:in `require'
    from /usr/local/bundle/gems/spring-2.1.0/lib/spring/commands.rb:33:in `<module:Spring>'
    from /usr/local/bundle/gems/spring-2.1.0/lib/spring/commands.rb:4:in `<top (required)>'
    from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /usr/local/bundle/gems/spring-2.1.0/lib/spring/server.rb:9:in `<top (required)>'
    from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /usr/local/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
    from /usr/local/bundle/gems/spring-2.1.0/lib/spring/client/server.rb:9:in `call'
    from /usr/local/bundle/gems/spring-2.1.0/lib/spring/client/command.rb:7:in `call'
    from /usr/local/bundle/gems/spring-2.1.0/lib/spring/client.rb:30:in `run'
    from /usr/local/bundle/gems/spring-2.1.0/bin/spring:49:in `<main>'

I am seeing two rake versions inside the docker container

*** LOCAL GEMS ***

rake (13.0.1, 12.3.2)

The output from running bundle env

## Environment

Bundler       1.17.2
  Platforms   ruby, x86_64-linux
Ruby          2.6.5p114 (2019-10-01 revision 67812) [x86_64-linux]
  Full Path   /usr/local/bin/ruby
  Config Dir  /usr/local/etc
RubyGems      3.0.3
  Gem Home    /usr/local/bundle
  Gem Path    /root/.gem/ruby/2.6.0:/usr/local/lib/ruby/gems/2.6.0:/usr/local/bundle
  User Path   /root/.gem/ruby/2.6.0
  Bin Dir     /usr/local/bundle/bin
Tools         
  Git         2.20.1
  RVM         not installed
  rbenv       not installed
  chruby      not installed

Bundler Build Metadata

Built At          2018-12-19
Git SHA           3fc4de72b
Released Version  false

Bundler settings

retry
  Set for your local app (/usr/local/bundle/config): 3
jobs
  Set for your local app (/usr/local/bundle/config): 4
app_config
  Set via BUNDLE_APP_CONFIG: "/usr/local/bundle"
silence_root_warning
  Set via BUNDLE_SILENCE_ROOT_WARNING: true

### Gemfile

ruby
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.6.5'

# Rails Specific 
# =====================================================================================

# Rails, MySQL, Puma
gem 'rails', '~> 5.2.0'
gem 'mysql2', '>= 0.4.4', '< 0.6.0'
gem 'puma', '~> 4.3'

# Rails Dependencies
gem 'sassc-rails'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'

# loads rails apps faster 
gem 'bootsnap', '>= 1.1.0', require: false

# Application Specific 
# =====================================================================================

# validators
gem 'validate_url'

# security
gem 'sanitize'

# interface items
gem 'carrierwave', '~> 1.2', '>= 1.2.3'
gem 'mini_magick'
gem 'multi-select-rails'

# cas client
gem 'rack-cas', '~> 0.16.0'

# managing cron jobs
gem 'whenever', require: false

# frontend
gem 'normalize-scss'
gem 'font-awesome-sass'
gem "non-stupid-digest-assets" # generates assets without fingerprint for 404 and 500 errors. 

# searching / indexing for speeds / pagination for elegance
# gem 'kaminari'
gem 'elasticsearch-model'
gem 'elasticsearch-rails'

# Test Suite
# =====================================================================================
group :test do
  gem 'rspec-rails'
  gem 'shoulda'
  gem 'shoulda-matchers'
  gem 'database_cleaner'
  gem 'simplecov', '~> 0.10', '< 0.18'
  gem 'simplecov-console'
  gem 'capybara', '>= 2.15', '< 4.0'
  gem 'selenium-webdriver', '~> 3.14'
  gem 'elasticsearch-extensions'
  gem 'executables'
  gem 'rspec_junit_formatter'
end

# Development / Test Items (Primarily debugging)
# =====================================================================================
group :development, :test do
  gem 'faker'
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw] # from rails new
  gem 'pry'
  gem 'pry-rails'
  gem 'factory_bot_rails'
  gem 'webmock'
end

group :development do
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
  # performance helper
  gem 'bullet' # helps to eliminate N+1 Queries 
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

### Gemfile.lock

GEM
  remote: https://rubygems.org/
  specs:
    actioncable (5.2.4.1)
      actionpack (= 5.2.4.1)
      nio4r (~> 2.0)
      websocket-driver (>= 0.6.1)
    actionmailer (5.2.4.1)
      actionpack (= 5.2.4.1)
      actionview (= 5.2.4.1)
      activejob (= 5.2.4.1)
      mail (~> 2.5, >= 2.5.4)
      rails-dom-testing (~> 2.0)
    actionpack (5.2.4.1)
      actionview (= 5.2.4.1)
      activesupport (= 5.2.4.1)
      rack (~> 2.0, >= 2.0.8)
      rack-test (>= 0.6.3)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.0, >= 1.0.2)
    actionview (5.2.4.1)
      activesupport (= 5.2.4.1)
      builder (~> 3.1)
      erubi (~> 1.4)
      rails-dom-testing (~> 2.0)
      rails-html-sanitizer (~> 1.0, >= 1.0.3)
    activejob (5.2.4.1)
      activesupport (= 5.2.4.1)
      globalid (>= 0.3.6)
    activemodel (5.2.4.1)
      activesupport (= 5.2.4.1)
    activerecord (5.2.4.1)
      activemodel (= 5.2.4.1)
      activesupport (= 5.2.4.1)
      arel (>= 9.0)
    activestorage (5.2.4.1)
      actionpack (= 5.2.4.1)
      activerecord (= 5.2.4.1)
      marcel (~> 0.3.1)
    activesupport (5.2.4.1)
      concurrent-ruby (~> 1.0, >= 1.0.2)
      i18n (>= 0.7, < 2)
      minitest (~> 5.1)
      tzinfo (~> 1.1)
    addressable (2.7.0)
      public_suffix (>= 2.0.2, < 5.0)
    ansi (1.5.0)
    arel (9.0.0)
    bindex (0.8.1)
    bootsnap (1.4.6)
      msgpack (~> 1.0)
    builder (3.2.4)
    bullet (6.1.0)
      activesupport (>= 3.0.0)
      uniform_notifier (~> 1.11)
    byebug (11.1.1)
    capybara (3.31.0)
      addressable
      mini_mime (>= 0.1.3)
      nokogiri (~> 1.8)
      rack (>= 1.6.0)
      rack-test (>= 0.6.3)
      regexp_parser (~> 1.5)
      xpath (~> 3.2)
    carrierwave (1.3.1)
      activemodel (>= 4.0.0)
      activesupport (>= 4.0.0)
      mime-types (>= 1.16)
    childprocess (3.0.0)
    chronic (0.10.2)
    coderay (1.1.2)
    coffee-rails (4.2.2)
      coffee-script (>= 2.2.0)
      railties (>= 4.0.0)
    coffee-script (2.4.1)
      coffee-script-source
      execjs
    coffee-script-source (1.12.2)
    concurrent-ruby (1.1.6)
    crack (0.4.3)
      safe_yaml (~> 1.0.0)
    crass (1.0.6)
    database_cleaner (1.8.3)
    diff-lcs (1.3)
    docile (1.3.2)
    elasticsearch (7.5.0)
      elasticsearch-api (= 7.5.0)
      elasticsearch-transport (= 7.5.0)
    elasticsearch-api (7.5.0)
      multi_json
    elasticsearch-extensions (0.0.31)
      ansi
      elasticsearch
    elasticsearch-model (7.0.0)
      activesupport (> 3)
      elasticsearch (> 1)
      hashie
    elasticsearch-rails (7.0.0)
    elasticsearch-transport (7.5.0)
      faraday (>= 0.14, < 1)
      multi_json
    erubi (1.9.0)
    execjs (2.7.0)
    executables (0.1.0)
    factory_bot (5.1.1)
      activesupport (>= 4.2.0)
    factory_bot_rails (5.1.1)
      factory_bot (~> 5.1.0)
      railties (>= 4.2.0)
    faker (2.10.2)
      i18n (>= 1.6, < 2)
    faraday (0.17.3)
      multipart-post (>= 1.2, < 3)
    ffi (1.12.2)
    font-awesome-sass (5.12.0)
      sassc (>= 1.11)
    globalid (0.4.2)
      activesupport (>= 4.2.0)
    hashdiff (1.0.1)
    hashie (4.1.0)
    i18n (1.8.2)
      concurrent-ruby (~> 1.0)
    jbuilder (2.10.0)
      activesupport (>= 5.0.0)
    json (2.3.0)
    listen (3.1.5)
      rb-fsevent (~> 0.9, >= 0.9.4)
      rb-inotify (~> 0.9, >= 0.9.7)
      ruby_dep (~> 1.2)
    loofah (2.4.0)
      crass (~> 1.0.2)
      nokogiri (>= 1.5.9)
    mail (2.7.1)
      mini_mime (>= 0.1.1)
    marcel (0.3.3)
      mimemagic (~> 0.3.2)
    method_source (0.9.2)
    mime-types (3.3.1)
      mime-types-data (~> 3.2015)
    mime-types-data (3.2019.1009)
    mimemagic (0.3.4)
    mini_magick (4.10.1)
    mini_mime (1.0.2)
    mini_portile2 (2.4.0)
    minitest (5.14.0)
    msgpack (1.3.3)
    multi-select-rails (0.9.12)
      railties (>= 3.0)
    multi_json (1.14.1)
    multipart-post (2.1.1)
    mysql2 (0.5.3)
    nio4r (2.5.2)
    nokogiri (1.10.9)
      mini_portile2 (~> 2.4.0)
    nokogumbo (2.0.2)
      nokogiri (~> 1.8, >= 1.8.4)
    non-stupid-digest-assets (1.0.9)
      sprockets (>= 2.0)
    normalize-scss (7.0.1)
      sass (~> 3.3)
    pry (0.12.2)
      coderay (~> 1.1.0)
      method_source (~> 0.9.0)
    pry-rails (0.3.9)
      pry (>= 0.10.4)
    public_suffix (4.0.3)
    puma (4.3.3)
      nio4r (~> 2.0)
    rack (2.2.2)
    rack-cas (0.16.1)
      addressable (~> 2.3)
      nokogiri (~> 1.5)
      rack (>= 1.3)
    rack-test (1.1.0)
      rack (>= 1.0, < 3)
    rails (5.2.4.1)
      actioncable (= 5.2.4.1)
      actionmailer (= 5.2.4.1)
      actionpack (= 5.2.4.1)
      actionview (= 5.2.4.1)
      activejob (= 5.2.4.1)
      activemodel (= 5.2.4.1)
      activerecord (= 5.2.4.1)
      activestorage (= 5.2.4.1)
      activesupport (= 5.2.4.1)
      bundler (>= 1.3.0)
      railties (= 5.2.4.1)
      sprockets-rails (>= 2.0.0)
    rails-dom-testing (2.0.3)
      activesupport (>= 4.2.0)
      nokogiri (>= 1.6)
    rails-html-sanitizer (1.3.0)
      loofah (~> 2.3)
    railties (5.2.4.1)
      actionpack (= 5.2.4.1)
      activesupport (= 5.2.4.1)
      method_source
      rake (>= 0.8.7)
      thor (>= 0.19.0, < 2.0)
    rake (13.0.1)
    rb-fsevent (0.10.3)
    rb-inotify (0.10.1)
      ffi (~> 1.0)
    regexp_parser (1.7.0)
    rspec-core (3.9.1)
      rspec-support (~> 3.9.1)
    rspec-expectations (3.9.0)
      diff-lcs (>= 1.2.0, < 2.0)
      rspec-support (~> 3.9.0)
    rspec-mocks (3.9.1)
      diff-lcs (>= 1.2.0, < 2.0)
      rspec-support (~> 3.9.0)
    rspec-rails (3.9.0)
      actionpack (>= 3.0)
      activesupport (>= 3.0)
      railties (>= 3.0)
      rspec-core (~> 3.9.0)
      rspec-expectations (~> 3.9.0)
      rspec-mocks (~> 3.9.0)
      rspec-support (~> 3.9.0)
    rspec-support (3.9.2)
    rspec_junit_formatter (0.4.1)
      rspec-core (>= 2, < 4, != 2.12.0)
    ruby_dep (1.5.0)
    rubyzip (2.2.0)
    safe_yaml (1.0.5)
    sanitize (5.1.0)
      crass (~> 1.0.2)
      nokogiri (>= 1.8.0)
      nokogumbo (~> 2.0)
    sass (3.7.4)
      sass-listen (~> 4.0.0)
    sass-listen (4.0.0)
      rb-fsevent (~> 0.9, >= 0.9.4)
      rb-inotify (~> 0.9, >= 0.9.7)
    sassc (2.2.1)
      ffi (~> 1.9)
    sassc-rails (2.1.2)
      railties (>= 4.0.0)
      sassc (>= 2.0)
      sprockets (> 3.0)
      sprockets-rails
      tilt
    selenium-webdriver (3.142.7)
      childprocess (>= 0.5, < 4.0)
      rubyzip (>= 1.2.2)
    shoulda (2.11.3)
    shoulda-matchers (4.3.0)
      activesupport (>= 4.2.0)
    simplecov (0.17.1)
      docile (~> 1.1)
      json (>= 1.8, < 3)
      simplecov-html (~> 0.10.0)
    simplecov-console (0.7.2)
      ansi
      simplecov
      terminal-table
    simplecov-html (0.10.2)
    spring (2.1.0)
    spring-watcher-listen (2.0.1)
      listen (>= 2.7, < 4.0)
      spring (>= 1.2, < 3.0)
    sprockets (4.0.0)
      concurrent-ruby (~> 1.0)
      rack (> 1, < 3)
    sprockets-rails (3.2.1)
      actionpack (>= 4.0)
      activesupport (>= 4.0)
      sprockets (>= 3.0.0)
    terminal-table (1.8.0)
      unicode-display_width (~> 1.1, >= 1.1.1)
    thor (1.0.1)
    thread_safe (0.3.6)
    tilt (2.0.10)
    turbolinks (5.2.1)
      turbolinks-source (~> 5.2)
    turbolinks-source (5.2.0)
    tzinfo (1.2.6)
      thread_safe (~> 0.1)
    uglifier (4.2.0)
      execjs (>= 0.3.0, < 3)
    unicode-display_width (1.6.1)
    uniform_notifier (1.13.0)
    validate_url (1.0.8)
      activemodel (>= 3.0.0)
      public_suffix
    web-console (3.7.0)
      actionview (>= 5.0)
      activemodel (>= 5.0)
      bindex (>= 0.4.0)
      railties (>= 5.0)
    webmock (3.8.2)
      addressable (>= 2.3.6)
      crack (>= 0.3.2)
      hashdiff (>= 0.4.0, < 2.0.0)
    websocket-driver (0.7.1)
      websocket-extensions (>= 0.1.0)
    websocket-extensions (0.1.4)
    whenever (1.0.0)
      chronic (>= 0.6.3)
    xpath (3.2.0)
      nokogiri (~> 1.8)

PLATFORMS
  ruby

DEPENDENCIES
  bootsnap (>= 1.1.0)
  bullet
  byebug
  capybara (>= 2.15, < 4.0)
  carrierwave (~> 1.2, >= 1.2.3)
  coffee-rails (~> 4.2)
  database_cleaner
  elasticsearch-extensions
  elasticsearch-model
  elasticsearch-rails
  executables
  factory_bot_rails
  faker
  font-awesome-sass
  jbuilder (~> 2.5)
  listen (>= 3.0.5, < 3.2)
  mini_magick
  multi-select-rails
  mysql2 (>= 0.4.4, < 0.6.0)
  non-stupid-digest-assets
  normalize-scss
  pry
  pry-rails
  puma (~> 4.3)
  rack-cas (~> 0.16.0)
  rails (~> 5.2.0)
  rspec-rails
  rspec_junit_formatter
  sanitize
  sassc-rails
  selenium-webdriver (~> 3.14)
  shoulda
  shoulda-matchers
  simplecov (~> 0.10, < 0.18)
  simplecov-console
  spring
  spring-watcher-listen (~> 2.0.0)
  turbolinks (~> 5)
  tzinfo-data
  uglifier (>= 1.3.0)
  validate_url
  web-console (>= 3.3.0)
  webmock
  whenever

RUBY VERSION
   ruby 2.6.5p114

BUNDLED WITH
   1.17.2

Docker File

FROM ruby:2.6

# Install capybara-webkit deps
RUN apt-get update \
    && apt-get install -y xvfb git cron qt5-default libqt5webkit5-dev \
                          gstreamer1.0-plugins-base gstreamer1.0-tools gstreamer1.0-x \
                          imagemagick

# Use JEMALLOC instead
RUN apt-get install -y libjemalloc2 libjemalloc-dev
ENV LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so

# Node.js
RUN curl -sL https://deb.nodesource.com/setup_13.x | bash - \
    && apt-get install -y nodejs

# yarn
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -\
    && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
    && apt-get update \
    && apt-get install -y yarn

# Install our dependencies and rails
RUN mkdir -p /home/sotldirectory

WORKDIR /home/sotldirectory
ADD . /home/sotldirectory
RUN bundle install --jobs=4 --retry=3

# Copy openssl config to correct folder
RUN cp -R openssl.cnf /etc/ssl 

ADD ./startup.sh /usr/bin/
RUN chmod -v +x /usr/bin/startup.sh
ENTRYPOINT ["/usr/bin/startup.sh"]

startup.sh

#!/bin/bash

# set terminal 
export TERM=vt100

# start cron and update whenever 
service cron start
whenever --update-crontab

# remove PID and start the server
file="./tmp/pids/server.pid"
[ -f $file ] && rm $file

bin/rails s -p 3000 -b '0.0.0.0'

schedule.rb - relavant section

# change to the base directory of the application
# run the file with the rails runner task 
every 1.minutes do
  command 'cd /home/sotldirectory && bin/rails r import/cron_import.rb'
end

Solution

  • Changed the dockerfile from FROM ruby:2.6 to FROM ruby:2.6.0. Using ruby:2.6 appears to be pulling 2.6.5. I deleted the gemfile.lock and and a bundle install to reset the gemfile.lock. Currently it is showing one version of bundler 1.17.2 and everything is working normally again. For anyone else that sees this I believe their is issues with bundler 2 and rubygems.

    Similar issue seen here https://github.com/rubygems/bundler/issues/6882