Skip to content
This repository has been archived by the owner on Apr 14, 2021. It is now read-only.

bundler attempts to install gems which conflict with an explicit ruby version requirement #6471

Closed
lamont-granquist opened this issue Apr 4, 2018 · 15 comments

Comments

@lamont-granquist
Copy link
Contributor

Simple example:

% cat Gemfile
source "https://rubygems.org"
ruby "2.3.7"
gem "berkshelf"
% bundle install
Fetching gem metadata from https://rubygems.org/.............
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
Using public_suffix 3.0.2
Using addressable 2.5.2
Using buff-extensions 2.0.0
Using hashie 3.5.7
Using varia_model 0.6.0
Using buff-config 2.0.0
Using bundler 1.16.1
Using fuzzyurl 0.9.0
Using tomlrb 1.2.6
Using mixlib-config 2.2.6
Using mixlib-shellout 2.3.2
Using chef-config 14.0.190
Using libyajl2 1.2.0
Using ffi-yajl 2.3.1
Using mixlib-log 2.0.3
Using rack 2.0.4
Using uuidtools 2.1.5
Fetching chef-zero 14.0.1
Installing chef-zero 14.0.1
Gem::RuntimeRequirementNotMetError: chef-zero requires Ruby version >= 2.4.3. The current ruby version is 2.3.0.
An error occurred while installing chef-zero (14.0.1), and Bundler cannot continue.
Make sure that `gem install chef-zero -v '14.0.1'` succeeds before bundling.

In Gemfile:
  berkshelf was resolved to 6.3.1, which depends on
    chef was resolved to 14.0.190, which depends on
      chef-zero
% bundle --version
Bundler version 1.16.1

chef-14.0.190 is pinned >= 2.4.0 here:

https://github.com/chef/chef/blob/97c1dd6f1cac6d97e85d05039cad8b28596141ba/chef.gemspec#L16

so chef-14 shouldn't been in the solution set. But it only pins chef-zero to >= 13.0 here:

https://github.com/chef/chef/blob/97c1dd6f1cac6d97e85d05039cad8b28596141ba/chef.gemspec#L35

That itself should have allowed chef-zero 13.x versions which supported 2.3.x to install, but it selected the latest chef-zero-14.x which has been bumped to >= 2.4.0

@lamont-granquist
Copy link
Contributor Author

In case it matters, I'm really on ruby-2.3.7 and don't have those gems installed for any versions (and couldn't install the versions that its picking up, so it must be getting those from the index):

8:42 coredump ~/test % gem uninstall chef
Gem 'chef' is not installed
git: rvm:ruby-2.3.7
8:43 coredump ~/test % gem uninstall ohai
Gem 'ohai' is not installed
git: rvm:ruby-2.3.7
8:43 coredump ~/test % gem uninstall chef-zero
Gem 'chef-zero' is not installed
git: rvm:ruby-2.3.7
8:43 coredump ~/test %

@lamont-granquist
Copy link
Contributor Author

Also note that rubygems doesn't get this right either:

ERROR:  Error installing berkshelf:
	There are no versions of ohai (~> 14.0) compatible with your Ruby & RubyGems. Maybe try installing an older version of the gem you're looking for?
	ohai requires Ruby version >= 2.4. The current ruby version is 2.3.0.

The ohai pin there is because its selecting chef-14, which itself doesn't install on 2.3.x and then picking up the 14.x pin on ohai which blows up. The released version of berkshelf allows chef >= 13.6.52, which is accurate, there's an API we need in exactly that version and don't care if we're on 13 or 14.

This Gemfile solves fine with the manual pin:

source "https://rubygems.org"
ruby "2.3.7"
gem "berkshelf"
gem "chef", "~> 13"

@lamont-granquist
Copy link
Contributor Author

So.....

I made a release of berkshelf 6.3.2 which pins to chef < 14 which is effectively the same as the that last Gemfile i posted with the manual pin. Now bundler/rubygems picks that version and its all happy.

The repro case now requires an explict pin onto 6.3.1:

% cat Gemfile
source "https://rubygems.org"
ruby "2.3.7"
gem "berkshelf", "= 6.3.1"

@segiddins
Copy link
Member

This is happening for me since I'm getting a 429 and Bundler is having to fall back to the gem dependency endpoint

HTTP 429 Too Many Requests https://index.rubygems.org/info/buff-ruby_engine
Bundler::HTTPError: Net::HTTPTooManyRequests: <html>
<head><title>429 Too Many Requests</title></head>
<body bgcolor="white">
<center><h1>429 Too Many Requests</h1></center>
<hr><center>nginx</center>
</body>
</html>

/Users/segiddins/.gem/ruby/2.3.7/gems/bundler-1.16.1/lib/bundler/fetcher/downloader.rb:37:in `fetch'
  /Users/segiddins/.gem/ruby/2.3.7/gems/bundler-1.16.1/lib/bundler/fetcher/compact_index.rb:117:in `call'
  /Users/segiddins/.gem/ruby/2.3.7/gems/bundler-1.16.1/lib/bundler/compact_index_client/updater.rb:51:in `block in update'
  /Users/segiddins/.rubies/2.3.7/lib/ruby/2.3.0/tmpdir.rb:89:in `mktmpdir'
  /Users/segiddins/.gem/ruby/2.3.7/gems/bundler-1.16.1/lib/bundler/compact_index_client/updater.rb:31:in `update'
  /Users/segiddins/.gem/ruby/2.3.7/gems/bundler-1.16.1/lib/bundler/compact_index_client.rb:82:in `update'
  /Users/segiddins/.gem/ruby/2.3.7/gems/bundler-1.16.1/lib/bundler/compact_index_client.rb:98:in `update_info'
  /Users/segiddins/.gem/ruby/2.3.7/gems/bundler-1.16.1/lib/bundler/compact_index_client.rb:55:in `block in dependencies'
  /Users/segiddins/.gem/ruby/2.3.7/gems/bundler-1.16.1/lib/bundler/fetcher/compact_index.rb:88:in `block (3 levels) in compact_index_client'
  /Users/segiddins/.gem/ruby/2.3.7/gems/bundler-1.16.1/lib/bundler/worker.rb:64:in `apply_func'
  /Users/segiddins/.gem/ruby/2.3.7/gems/bundler-1.16.1/lib/bundler/worker.rb:59:in `block in process_queue'
  /Users/segiddins/.gem/ruby/2.3.7/gems/bundler-1.16.1/lib/bundler/worker.rb:56:in `loop'
  /Users/segiddins/.gem/ruby/2.3.7/gems/bundler-1.16.1/lib/bundler/worker.rb:56:in `process_queue'
  /Users/segiddins/.gem/ruby/2.3.7/gems/bundler-1.16.1/lib/bundler/worker.rb:90:in `block (2 levels) in create_threads'

@lamont-granquist
Copy link
Contributor Author

here's my current verbose output if it help someone:

% bundle install --verbose
Running `bundle install --verbose` with bundler 1.16.1
Found changes from the lockfile, re-resolving dependencies because bundler is unlocking ruby
HTTP GET https://index.rubygems.org/versions
HTTP 206 Partial Content https://index.rubygems.org/versions
Fetching gem metadata from https://rubygems.org/
Looking up gems ["berkshelf"]
HTTP GET https://index.rubygems.org/info/berkshelf
HTTP 206 Partial Content https://index.rubygems.org/info/berkshelf
Looking up gems ["chef", "dep_selector", "minitar", "thor", "solve", "activesupport", "multi_json", "ridley", "vagrant", "activemodel", "chozo", "hashie", "yajl-ruby", "net-ssh-gateway", "moneta", "faraday", "json", "mixlib-config", "mixlib-shellout", "retryable", "celluloid", "addressable", "test-kitchen", "buff-shell_out", "rbzip2", "buff-config", "buff-extensions", "berkshelf-api-client", "octokit", "celluloid-io", "cleanroom", "httpclient", "mixlib-archive", "concurrent-ruby"]
HTTP GET https://index.rubygems.org/info/chef
HTTP 206 Partial Content https://index.rubygems.org/info/chef
Looking up gems ["ffi", "dep-selector-libgecode", "builder", "i18n", "memcache-client", "tzinfo", "minitest", "thread_safe", "method_source", "bcrypt-ruby", "tomlrb", "faraday_middleware", "multi_xml", "rash", "netrc", "sawyer", "semverse", "molinillo", "rack", "multipart-post", "git-style-binaries", "net-scp", "net-ssh", "tarruby", "virtualbox", "archive-tar-minitar", "json_pure", "mario", "erubis", "childprocess", "log4r", "buff-ruby_engine", "varia_model", "nio4r", "bundler", "dotenv", "nenv", "rspec-logsplit", "timers", "mixlib-authentication", "mixlib-log", "net-http-persistent", "winrm", "buff-ignore", "chef-config", "win32-api", "win32-process", "windows-api", "windows-pr", "wmi-lite", "functional-ruby", "ref", "foodcritic", "hashr", "highline", "librarian", "mixlib-cli", "fog", "pry", "safe_yaml", "rubyzip", "mixlib-install", "winrm-elevated", "winrm-fs", "echoe", "launchy", "rake", "rspec", "public_suffix", "facter", "celluloid-essentials", "celluloid-extras", "celluloid-fsm", "celluloid-pool", "celluloid-supervision", "extlib", "ohai", "ruby-openid", "stomp", "amqp", "bunny", "ruby-hmac", "rest-client", "uuidtools", "net-ssh-multi", "treetop", "rdp-ruby-wmi", "systemu", "win32-dir", "win32-event", "win32-mutex", "win32-service", "chef-zero", "diff-lcs", "puma", "win32-mmap", "mime-types", "ffi-yajl", "plist", "win32-eventlog", "rspec-core", "rspec-expectations", "rspec_junit_formatter", "rspec-mocks", "serverspec", "specinfra", "syslog-logger", "proxifier", "net-sftp", "iniparse", "iso8601"]
Looking up gems ["bcrypt", "hoe", "ZenTest", "RubyInline", "atomic", "uri_template", "oauth2", "roauth", "bones", "ruby_parser", "camping", "fcgi", "mongrel", "test-spec", "thin", "shoulda", "trollop", "needle", "jruby-pageant", "bcrypt_pbkdf", "rbnacl", "rbnacl-libsodium", "nokogiri", "spruz", "minitar-cli", "abstract", "dotenv-deployment", "hitimes", "handsoap", "rubyntlm", "uuid", "gssapi", "savon", "logging", "gyoku", "nori", "ruby-progressbar", "connection_pool", "test-unit", "fuzzyurl", "xml-simple", "gherkin", "gist", "pry-doc", "rak", "rufus-lru", "cucumber-core", "termios", "coderay", "win32console", "yard", "slop", "spoon", "artifactory", "mixlib-versioning", "excon", "formatador", "named-parameters", "google-api-client", "unicode", "fog-brightbox", "fog-core", "fog-json", "ipaddress", "fog-softlayer", "fog-radosgw", "fog-sakuracloud", "fog-profitbricks", "fog-terremark", "fog-vmfusion", "fog-voxel", "fog-xml", "opennebula", "fog-atmos", "fog-ecloud", "fog-storm_on_demand", "fog-aws", "fog-serverlove", "fog-riakcs", "fog-local", "fog-powerdns", "fog-google", "fog-dynect", "fog-xenserver", "fog-aliyun", "fog-vsphere", "fog-cloudatcost", "fog-openstack", "fog-rackspace", "fog-digitalocean", "fog-dnsimple", "fog-internet-archive", "fog-joyent", "fog-ovirt", "psych", "rubyforge", "rcov", "gemcutter", "allison", "rdoc", "CFPropertyList", "sys-admin", "win32-security", "cucumber", "spicycode-rcov", "syntax", "configuration", "coveralls", "rubocop", "celluloid-gems", "ruby-yadis", "eventmachine", "amq-client", "amq-protocol", "english", "facets", "polyglot", "net-dhcp", "http-cookie", "http-accept", "win32-ipc", "ffi-win32-extensions", "mime-types-data", "ptools", "libyajl2", "rspec-support", "net-telnet", "sfl", "rspec-its"]
HTTP GET https://index.rubygems.org/info/psych
HTTP 416 Range Not Satisfiable https://index.rubygems.org/info/psych
Bundler::HTTPError: Net::HTTPRequestedRangeNotSatisfiable
/Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/fetcher/downloader.rb:37:in `fetch'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/fetcher/compact_index.rb:117:in `call'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/compact_index_client/updater.rb:51:in `block in update'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/2.3.0/tmpdir.rb:89:in `mktmpdir'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/compact_index_client/updater.rb:31:in `update'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/compact_index_client.rb:82:in `update'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/compact_index_client.rb:98:in `update_info'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/compact_index_client.rb:55:in `block in dependencies'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/fetcher/compact_index.rb:88:in `block (3 levels) in compact_index_client'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/worker.rb:64:in `apply_func'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/worker.rb:59:in `block in process_queue'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/worker.rb:56:in `loop'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/worker.rb:56:in `process_queue'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/worker.rb:90:in `block (2 levels) in create_threads'
Query List: ["berkshelf"]
Query Gemcutter Dependency Endpoint API: berkshelf
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=berkshelf
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=berkshelf
Query List: ["chef", "concurrent-ruby", "mixlib-archive", "octokit", "thor", "solve", "ridley", "retryable", "minitar", "httpclient", "faraday", "cleanroom", "mixlib-shellout", "buff-extensions", "buff-config", "buff-shell_out", "berkshelf-api-client", "addressable", "activesupport", "chozo", "hashie", "rbzip2", "celluloid", "celluloid-io", "yajl-ruby", "multi_json", "vagrant", "moneta", "net-ssh-gateway", "mixlib-config", "json", "activemodel", "test-kitchen", "dep_selector"]
Query Gemcutter Dependency Endpoint API: chef,concurrent-ruby,mixlib-archive,octokit,thor,solve,ridley,retryable,minitar,httpclient,faraday,cleanroom,mixlib-shellout,buff-extensions,buff-config,buff-shell_out,berkshelf-api-client,addressable,activesupport,chozo,hashie,rbzip2,celluloid,celluloid-io,yajl-ruby,multi_json,vagrant,moneta,net-ssh-gateway,mixlib-config,json,activemodel,test-kitchen,dep_selector
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=activemodel%2Cactivesupport%2Caddressable%2Cberkshelf-api-client%2Cbuff-config%2Cbuff-extensions%2Cbuff-shell_out%2Ccelluloid%2Ccelluloid-io%2Cchef%2Cchozo%2Ccleanroom%2Cconcurrent-ruby%2Cdep_selector%2Cfaraday%2Chashie%2Chttpclient%2Cjson%2Cminitar%2Cmixlib-archive%2Cmixlib-config%2Cmixlib-shellout%2Cmoneta%2Cmulti_json%2Cnet-ssh-gateway%2Coctokit%2Crbzip2%2Cretryable%2Cridley%2Csolve%2Ctest-kitchen%2Cthor%2Cvagrant%2Cyajl-ruby
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=activemodel%2Cactivesupport%2Caddressable%2Cberkshelf-api-client%2Cbuff-config%2Cbuff-extensions%2Cbuff-shell_out%2Ccelluloid%2Ccelluloid-io%2Cchef%2Cchozo%2Ccleanroom%2Cconcurrent-ruby%2Cdep_selector%2Cfaraday%2Chashie%2Chttpclient%2Cjson%2Cminitar%2Cmixlib-archive%2Cmixlib-config%2Cmixlib-shellout%2Cmoneta%2Cmulti_json%2Cnet-ssh-gateway%2Coctokit%2Crbzip2%2Cretryable%2Cridley%2Csolve%2Ctest-kitchen%2Cthor%2Cvagrant%2Cyajl-ruby
Query List: ["builder", "i18n", "bcrypt-ruby", "minitest", "tzinfo", "thread_safe", "method_source", "memcache-client", "rake", "rspec", "launchy", "public_suffix", "varia_model", "buff-ruby_engine", "timers", "celluloid-extras", "celluloid-fsm", "celluloid-pool", "celluloid-supervision", "celluloid-essentials", "rspec-logsplit", "dotenv", "nenv", "bundler", "facter", "nio4r", "win32-eventlog", "wmi-lite", "win32-mmap", "win32-service", "win32-process", "win32-mutex", "win32-event", "win32-dir", "win32-api", "windows-pr", "windows-api", "ffi", "specinfra", "serverspec", "rspec_junit_formatter", "rspec-mocks", "rspec-expectations", "rspec-core", "plist", "pry", "chef-zero", "diff-lcs", "erubis", "highline", "net-ssh-multi", "net-ssh", "ffi-yajl", "ohai", "mixlib-authentication", "mixlib-log", "mixlib-cli", "proxifier", "uuidtools", "syslog-logger", "iso8601", "iniparse", "net-sftp", "chef-config", "rest-client", "bunny", "treetop", "mime-types", "puma", "extlib", "rdp-ruby-wmi", "ruby-openid", "stomp", "systemu", "amqp", "ruby-hmac", "ref", "functional-ruby", "dep-selector-libgecode", "multipart-post", "rack", "tomlrb", "echoe", "sawyer", "faraday_middleware", "multi_xml", "netrc", "rash", "semverse", "buff-ignore", "net-http-persistent", "winrm", "molinillo", "mixlib-install", "safe_yaml", "net-scp", "foodcritic", "hashr", "librarian", "rubyzip", "winrm-fs", "winrm-elevated", "fog", "archive-tar-minitar", "virtualbox", "mario", "childprocess", "log4r", "git-style-binaries", "tarruby", "json_pure"]
Query Gemcutter Dependency Endpoint API: builder,i18n,bcrypt-ruby,minitest,tzinfo,thread_safe,method_source,memcache-client,rake,rspec,launchy,public_suffix,varia_model,buff-ruby_engine,timers,celluloid-extras,celluloid-fsm,celluloid-pool,celluloid-supervision,celluloid-essentials,rspec-logsplit,dotenv,nenv,bundler,facter,nio4r,win32-eventlog,wmi-lite,win32-mmap,win32-service,win32-process,win32-mutex,win32-event,win32-dir,win32-api,windows-pr,windows-api,ffi,specinfra,serverspec,rspec_junit_formatter,rspec-mocks,rspec-expectations,rspec-core,plist,pry,chef-zero,diff-lcs,erubis,highline,net-ssh-multi,net-ssh,ffi-yajl,ohai,mixlib-authentication,mixlib-log,mixlib-cli,proxifier,uuidtools,syslog-logger,iso8601,iniparse,net-sftp,chef-config,rest-client,bunny,treetop,mime-types,puma,extlib,rdp-ruby-wmi,ruby-openid,stomp,systemu,amqp,ruby-hmac,ref,functional-ruby,dep-selector-libgecode,multipart-post,rack,tomlrb,echoe,sawyer,faraday_middleware,multi_xml,netrc,rash,semverse,buff-ignore,net-http-persistent,winrm,molinillo,mixlib-install,safe_yaml,net-scp,foodcritic,hashr,librarian,rubyzip,winrm-fs,winrm-elevated,fog,archive-tar-minitar,virtualbox,mario,childprocess,log4r,git-style-binaries,tarruby,json_pure
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=bcrypt-ruby%2Cbuff-ruby_engine%2Cbuilder%2Cbundler%2Ccelluloid-essentials%2Ccelluloid-extras%2Ccelluloid-fsm%2Ccelluloid-pool%2Ccelluloid-supervision%2Cchef-zero%2Cdiff-lcs%2Cdotenv%2Cerubis%2Cfacter%2Cffi%2Chighline%2Ci18n%2Claunchy%2Cmemcache-client%2Cmethod_source%2Cminitest%2Cnenv%2Cnio4r%2Cplist%2Cpry%2Cpublic_suffix%2Crake%2Crspec%2Crspec-core%2Crspec-expectations%2Crspec-logsplit%2Crspec-mocks%2Crspec_junit_formatter%2Cserverspec%2Cspecinfra%2Cthread_safe%2Ctimers%2Ctzinfo%2Cvaria_model%2Cwin32-api%2Cwin32-dir%2Cwin32-event%2Cwin32-eventlog%2Cwin32-mmap%2Cwin32-mutex%2Cwin32-process%2Cwin32-service%2Cwindows-api%2Cwindows-pr%2Cwmi-lite
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=bcrypt-ruby%2Cbuff-ruby_engine%2Cbuilder%2Cbundler%2Ccelluloid-essentials%2Ccelluloid-extras%2Ccelluloid-fsm%2Ccelluloid-pool%2Ccelluloid-supervision%2Cchef-zero%2Cdiff-lcs%2Cdotenv%2Cerubis%2Cfacter%2Cffi%2Chighline%2Ci18n%2Claunchy%2Cmemcache-client%2Cmethod_source%2Cminitest%2Cnenv%2Cnio4r%2Cplist%2Cpry%2Cpublic_suffix%2Crake%2Crspec%2Crspec-core%2Crspec-expectations%2Crspec-logsplit%2Crspec-mocks%2Crspec_junit_formatter%2Cserverspec%2Cspecinfra%2Cthread_safe%2Ctimers%2Ctzinfo%2Cvaria_model%2Cwin32-api%2Cwin32-dir%2Cwin32-event%2Cwin32-eventlog%2Cwin32-mmap%2Cwin32-mutex%2Cwin32-process%2Cwin32-service%2Cwindows-api%2Cwindows-pr%2Cwmi-lite
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=amqp%2Cbuff-ignore%2Cbunny%2Cchef-config%2Cdep-selector-libgecode%2Cechoe%2Cextlib%2Cfaraday_middleware%2Cffi-yajl%2Cfoodcritic%2Cfunctional-ruby%2Chashr%2Ciniparse%2Ciso8601%2Clibrarian%2Cmime-types%2Cmixlib-authentication%2Cmixlib-cli%2Cmixlib-install%2Cmixlib-log%2Cmolinillo%2Cmulti_xml%2Cmultipart-post%2Cnet-http-persistent%2Cnet-scp%2Cnet-sftp%2Cnet-ssh%2Cnet-ssh-multi%2Cnetrc%2Cohai%2Cproxifier%2Cpuma%2Crack%2Crash%2Crdp-ruby-wmi%2Cref%2Crest-client%2Cruby-hmac%2Cruby-openid%2Crubyzip%2Csafe_yaml%2Csawyer%2Csemverse%2Cstomp%2Csyslog-logger%2Csystemu%2Ctomlrb%2Ctreetop%2Cuuidtools%2Cwinrm
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=amqp%2Cbuff-ignore%2Cbunny%2Cchef-config%2Cdep-selector-libgecode%2Cechoe%2Cextlib%2Cfaraday_middleware%2Cffi-yajl%2Cfoodcritic%2Cfunctional-ruby%2Chashr%2Ciniparse%2Ciso8601%2Clibrarian%2Cmime-types%2Cmixlib-authentication%2Cmixlib-cli%2Cmixlib-install%2Cmixlib-log%2Cmolinillo%2Cmulti_xml%2Cmultipart-post%2Cnet-http-persistent%2Cnet-scp%2Cnet-sftp%2Cnet-ssh%2Cnet-ssh-multi%2Cnetrc%2Cohai%2Cproxifier%2Cpuma%2Crack%2Crash%2Crdp-ruby-wmi%2Cref%2Crest-client%2Cruby-hmac%2Cruby-openid%2Crubyzip%2Csafe_yaml%2Csawyer%2Csemverse%2Cstomp%2Csyslog-logger%2Csystemu%2Ctomlrb%2Ctreetop%2Cuuidtools%2Cwinrm
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=archive-tar-minitar%2Cchildprocess%2Cfog%2Cgit-style-binaries%2Cjson_pure%2Clog4r%2Cmario%2Ctarruby%2Cvirtualbox%2Cwinrm-elevated%2Cwinrm-fs
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=archive-tar-minitar%2Cchildprocess%2Cfog%2Cgit-style-binaries%2Cjson_pure%2Clog4r%2Cmario%2Ctarruby%2Cvirtualbox%2Cwinrm-elevated%2Cwinrm-fs
Query List: ["bcrypt", "celluloid-gems", "coveralls", "rubocop", "thin", "dotenv-deployment", "abstract", "CFPropertyList", "win32-security", "win32console", "sys-admin", "bones", "termios", "spoon", "configuration", "hoe", "ZenTest", "RubyInline", "ruby_parser", "slop", "coderay", "yard", "cucumber", "spicycode-rcov", "syntax", "rspec-support", "rspec-its", "sfl", "net-telnet", "atomic", "hitimes", "test-unit", "win32-ipc", "ptools", "ffi-win32-extensions", "amq-protocol", "eventmachine", "amq-client", "fuzzyurl", "rubyforge", "allison", "rdoc", "gemcutter", "rcov", "english", "oauth2", "roauth", "libyajl2", "rufus-lru", "nokogiri", "cucumber-core", "gherkin", "gist", "rak", "pry-doc", "xml-simple", "mime-types-data", "mixlib-versioning", "artifactory", "connection_pool", "needle", "bcrypt_pbkdf", "rbnacl", "rbnacl-libsodium", "jruby-pageant", "ipaddress", "net-dhcp", "test-spec", "camping", "fcgi", "mongrel", "http-cookie", "http-accept", "ruby-yadis", "psych", "uri_template", "polyglot", "facets", "gyoku", "nori", "logging", "rubyntlm", "gssapi", "savon", "uuid", "handsoap", "ruby-progressbar", "minitar-cli", "fog-xenserver", "fog-vsphere", "fog-voxel", "fog-vmfusion", "fog-terremark", "fog-storm_on_demand", "fog-softlayer", "fog-serverlove", "fog-sakuracloud", "fog-riakcs", "fog-radosgw", "fog-rackspace", "fog-profitbricks", "fog-powerdns", "fog-ovirt", "fog-openstack", "fog-local", "fog-joyent", "fog-internet-archive", "fog-google", "fog-ecloud", "fog-dynect", "fog-dnsimple", "fog-digitalocean", "fog-cloudatcost", "fog-brightbox", "fog-aws", "fog-atmos", "fog-aliyun", "fog-xml", "fog-json", "fog-core", "excon", "formatador", "unicode", "google-api-client", "named-parameters", "opennebula", "trollop", "shoulda", "spruz"]
Query Gemcutter Dependency Endpoint API: bcrypt,celluloid-gems,coveralls,rubocop,thin,dotenv-deployment,abstract,CFPropertyList,win32-security,win32console,sys-admin,bones,termios,spoon,configuration,hoe,ZenTest,RubyInline,ruby_parser,slop,coderay,yard,cucumber,spicycode-rcov,syntax,rspec-support,rspec-its,sfl,net-telnet,atomic,hitimes,test-unit,win32-ipc,ptools,ffi-win32-extensions,amq-protocol,eventmachine,amq-client,fuzzyurl,rubyforge,allison,rdoc,gemcutter,rcov,english,oauth2,roauth,libyajl2,rufus-lru,nokogiri,cucumber-core,gherkin,gist,rak,pry-doc,xml-simple,mime-types-data,mixlib-versioning,artifactory,connection_pool,needle,bcrypt_pbkdf,rbnacl,rbnacl-libsodium,jruby-pageant,ipaddress,net-dhcp,test-spec,camping,fcgi,mongrel,http-cookie,http-accept,ruby-yadis,psych,uri_template,polyglot,facets,gyoku,nori,logging,rubyntlm,gssapi,savon,uuid,handsoap,ruby-progressbar,minitar-cli,fog-xenserver,fog-vsphere,fog-voxel,fog-vmfusion,fog-terremark,fog-storm_on_demand,fog-softlayer,fog-serverlove,fog-sakuracloud,fog-riakcs,fog-radosgw,fog-rackspace,fog-profitbricks,fog-powerdns,fog-ovirt,fog-openstack,fog-local,fog-joyent,fog-internet-archive,fog-google,fog-ecloud,fog-dynect,fog-dnsimple,fog-digitalocean,fog-cloudatcost,fog-brightbox,fog-aws,fog-atmos,fog-aliyun,fog-xml,fog-json,fog-core,excon,formatador,unicode,google-api-client,named-parameters,opennebula,trollop,shoulda,spruz
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=CFPropertyList%2CRubyInline%2CZenTest%2Cabstract%2Callison%2Camq-client%2Camq-protocol%2Catomic%2Cbcrypt%2Cbones%2Ccelluloid-gems%2Ccoderay%2Cconfiguration%2Ccoveralls%2Ccucumber%2Cdotenv-deployment%2Cenglish%2Ceventmachine%2Cffi-win32-extensions%2Cfuzzyurl%2Cgemcutter%2Chitimes%2Choe%2Clibyajl2%2Cnet-telnet%2Cnokogiri%2Coauth2%2Cptools%2Crcov%2Crdoc%2Croauth%2Crspec-its%2Crspec-support%2Crubocop%2Cruby_parser%2Crubyforge%2Crufus-lru%2Csfl%2Cslop%2Cspicycode-rcov%2Cspoon%2Csyntax%2Csys-admin%2Ctermios%2Ctest-unit%2Cthin%2Cwin32-ipc%2Cwin32-security%2Cwin32console%2Cyard
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=CFPropertyList%2CRubyInline%2CZenTest%2Cabstract%2Callison%2Camq-client%2Camq-protocol%2Catomic%2Cbcrypt%2Cbones%2Ccelluloid-gems%2Ccoderay%2Cconfiguration%2Ccoveralls%2Ccucumber%2Cdotenv-deployment%2Cenglish%2Ceventmachine%2Cffi-win32-extensions%2Cfuzzyurl%2Cgemcutter%2Chitimes%2Choe%2Clibyajl2%2Cnet-telnet%2Cnokogiri%2Coauth2%2Cptools%2Crcov%2Crdoc%2Croauth%2Crspec-its%2Crspec-support%2Crubocop%2Cruby_parser%2Crubyforge%2Crufus-lru%2Csfl%2Cslop%2Cspicycode-rcov%2Cspoon%2Csyntax%2Csys-admin%2Ctermios%2Ctest-unit%2Cthin%2Cwin32-ipc%2Cwin32-security%2Cwin32console%2Cyard
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=artifactory%2Cbcrypt_pbkdf%2Ccamping%2Cconnection_pool%2Ccucumber-core%2Cfacets%2Cfcgi%2Cfog-rackspace%2Cfog-radosgw%2Cfog-riakcs%2Cfog-sakuracloud%2Cfog-serverlove%2Cfog-softlayer%2Cfog-storm_on_demand%2Cfog-terremark%2Cfog-vmfusion%2Cfog-voxel%2Cfog-vsphere%2Cfog-xenserver%2Cgherkin%2Cgist%2Cgssapi%2Cgyoku%2Chandsoap%2Chttp-accept%2Chttp-cookie%2Cipaddress%2Cjruby-pageant%2Clogging%2Cmime-types-data%2Cminitar-cli%2Cmixlib-versioning%2Cmongrel%2Cneedle%2Cnet-dhcp%2Cnori%2Cpolyglot%2Cpry-doc%2Cpsych%2Crak%2Crbnacl%2Crbnacl-libsodium%2Cruby-progressbar%2Cruby-yadis%2Crubyntlm%2Csavon%2Ctest-spec%2Curi_template%2Cuuid%2Cxml-simple
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=artifactory%2Cbcrypt_pbkdf%2Ccamping%2Cconnection_pool%2Ccucumber-core%2Cfacets%2Cfcgi%2Cfog-rackspace%2Cfog-radosgw%2Cfog-riakcs%2Cfog-sakuracloud%2Cfog-serverlove%2Cfog-softlayer%2Cfog-storm_on_demand%2Cfog-terremark%2Cfog-vmfusion%2Cfog-voxel%2Cfog-vsphere%2Cfog-xenserver%2Cgherkin%2Cgist%2Cgssapi%2Cgyoku%2Chandsoap%2Chttp-accept%2Chttp-cookie%2Cipaddress%2Cjruby-pageant%2Clogging%2Cmime-types-data%2Cminitar-cli%2Cmixlib-versioning%2Cmongrel%2Cneedle%2Cnet-dhcp%2Cnori%2Cpolyglot%2Cpry-doc%2Cpsych%2Crak%2Crbnacl%2Crbnacl-libsodium%2Cruby-progressbar%2Cruby-yadis%2Crubyntlm%2Csavon%2Ctest-spec%2Curi_template%2Cuuid%2Cxml-simple
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=excon%2Cfog-aliyun%2Cfog-atmos%2Cfog-aws%2Cfog-brightbox%2Cfog-cloudatcost%2Cfog-core%2Cfog-digitalocean%2Cfog-dnsimple%2Cfog-dynect%2Cfog-ecloud%2Cfog-google%2Cfog-internet-archive%2Cfog-joyent%2Cfog-json%2Cfog-local%2Cfog-openstack%2Cfog-ovirt%2Cfog-powerdns%2Cfog-profitbricks%2Cfog-xml%2Cformatador%2Cgoogle-api-client%2Cnamed-parameters%2Copennebula%2Cshoulda%2Cspruz%2Ctrollop%2Cunicode
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=excon%2Cfog-aliyun%2Cfog-atmos%2Cfog-aws%2Cfog-brightbox%2Cfog-cloudatcost%2Cfog-core%2Cfog-digitalocean%2Cfog-dnsimple%2Cfog-dynect%2Cfog-ecloud%2Cfog-google%2Cfog-internet-archive%2Cfog-joyent%2Cfog-json%2Cfog-local%2Cfog-openstack%2Cfog-ovirt%2Cfog-powerdns%2Cfog-profitbricks%2Cfog-xml%2Cformatador%2Cgoogle-api-client%2Cnamed-parameters%2Copennebula%2Cshoulda%2Cspruz%2Ctrollop%2Cunicode
Query List: ["libxml-ruby", "loquacious", "little-plugger", "bones-git", "bones-extras", "term-ansicolor", "simplecov", "colorize", "tins", "cucumber-expressions", "cucumber-wire", "multi_test", "event-bus", "gherkin3", "language", "rake-compiler", "mkrf", "weakling", "mini_portile2", "mini_portile", "pkg-config", "racc", "rexical", "tenderlove-frex", "jwt", "httpauth", "faraday-middleware", "win32-file", "unicode-display_width", "rainbow", "powerpack", "parser", "parallel", "astrolabe", "backports", "sexp_processor", "ParseTree", "power_assert", "daemons", "eventmachine-le", "http_parser.rb", "preforker", "mab", "markaby", "metaid", "activerecord", "cucumber-tag_expressions", "pry-debugger", "fission", "rbvmomi", "domain_name", "sqlite3", "flexmock", "lockfile", "powerbar", "gem_plugin", "cgi_multipart_eof_fix", "fastthread", "pcap", "jar-dependencies", "akami", "wasabi", "httpi", "crack", "hpricot", "apricoteatsgorilla", "rubiii-apricoteatsgorilla", "mocha", "macaddr", "inflecto", "xmlrpc", "rbovirt", "ovirt-engine-sdk", "googleauth", "retriable", "representable", "memoist", "hurley", "autoparse", "signet", "httpadapter", "sinatra", "liquid", "virtus", "shoulda-context", "shoulda-matchers", "curses"]
Query Gemcutter Dependency Endpoint API: libxml-ruby,loquacious,little-plugger,bones-git,bones-extras,term-ansicolor,simplecov,colorize,tins,cucumber-expressions,cucumber-wire,multi_test,event-bus,gherkin3,language,rake-compiler,mkrf,weakling,mini_portile2,mini_portile,pkg-config,racc,rexical,tenderlove-frex,jwt,httpauth,faraday-middleware,win32-file,unicode-display_width,rainbow,powerpack,parser,parallel,astrolabe,backports,sexp_processor,ParseTree,power_assert,daemons,eventmachine-le,http_parser.rb,preforker,mab,markaby,metaid,activerecord,cucumber-tag_expressions,pry-debugger,fission,rbvmomi,domain_name,sqlite3,flexmock,lockfile,powerbar,gem_plugin,cgi_multipart_eof_fix,fastthread,pcap,jar-dependencies,akami,wasabi,httpi,crack,hpricot,apricoteatsgorilla,rubiii-apricoteatsgorilla,mocha,macaddr,inflecto,xmlrpc,rbovirt,ovirt-engine-sdk,googleauth,retriable,representable,memoist,hurley,autoparse,signet,httpadapter,sinatra,liquid,virtus,shoulda-context,shoulda-matchers,curses
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=ParseTree%2Cactiverecord%2Castrolabe%2Cbackports%2Cbones-extras%2Cbones-git%2Ccolorize%2Ccucumber-expressions%2Ccucumber-tag_expressions%2Ccucumber-wire%2Cdaemons%2Cevent-bus%2Ceventmachine-le%2Cfaraday-middleware%2Cfission%2Cgherkin3%2Chttp_parser.rb%2Chttpauth%2Cjwt%2Clanguage%2Clibxml-ruby%2Clittle-plugger%2Cloquacious%2Cmab%2Cmarkaby%2Cmetaid%2Cmini_portile%2Cmini_portile2%2Cmkrf%2Cmulti_test%2Cparallel%2Cparser%2Cpkg-config%2Cpower_assert%2Cpowerpack%2Cpreforker%2Cpry-debugger%2Cracc%2Crainbow%2Crake-compiler%2Crbvmomi%2Crexical%2Csexp_processor%2Csimplecov%2Ctenderlove-frex%2Cterm-ansicolor%2Ctins%2Cunicode-display_width%2Cweakling%2Cwin32-file
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=ParseTree%2Cactiverecord%2Castrolabe%2Cbackports%2Cbones-extras%2Cbones-git%2Ccolorize%2Ccucumber-expressions%2Ccucumber-tag_expressions%2Ccucumber-wire%2Cdaemons%2Cevent-bus%2Ceventmachine-le%2Cfaraday-middleware%2Cfission%2Cgherkin3%2Chttp_parser.rb%2Chttpauth%2Cjwt%2Clanguage%2Clibxml-ruby%2Clittle-plugger%2Cloquacious%2Cmab%2Cmarkaby%2Cmetaid%2Cmini_portile%2Cmini_portile2%2Cmkrf%2Cmulti_test%2Cparallel%2Cparser%2Cpkg-config%2Cpower_assert%2Cpowerpack%2Cpreforker%2Cpry-debugger%2Cracc%2Crainbow%2Crake-compiler%2Crbvmomi%2Crexical%2Csexp_processor%2Csimplecov%2Ctenderlove-frex%2Cterm-ansicolor%2Ctins%2Cunicode-display_width%2Cweakling%2Cwin32-file
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=akami%2Capricoteatsgorilla%2Cautoparse%2Ccgi_multipart_eof_fix%2Ccrack%2Ccurses%2Cdomain_name%2Cfastthread%2Cflexmock%2Cgem_plugin%2Cgoogleauth%2Chpricot%2Chttpadapter%2Chttpi%2Churley%2Cinflecto%2Cjar-dependencies%2Cliquid%2Clockfile%2Cmacaddr%2Cmemoist%2Cmocha%2Covirt-engine-sdk%2Cpcap%2Cpowerbar%2Crbovirt%2Crepresentable%2Cretriable%2Crubiii-apricoteatsgorilla%2Cshoulda-context%2Cshoulda-matchers%2Csignet%2Csinatra%2Csqlite3%2Cvirtus%2Cwasabi%2Cxmlrpc
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=akami%2Capricoteatsgorilla%2Cautoparse%2Ccgi_multipart_eof_fix%2Ccrack%2Ccurses%2Cdomain_name%2Cfastthread%2Cflexmock%2Cgem_plugin%2Cgoogleauth%2Chpricot%2Chttpadapter%2Chttpi%2Churley%2Cinflecto%2Cjar-dependencies%2Cliquid%2Clockfile%2Cmacaddr%2Cmemoist%2Cmocha%2Covirt-engine-sdk%2Cpcap%2Cpowerbar%2Crbovirt%2Crepresentable%2Cretriable%2Crubiii-apricoteatsgorilla%2Cshoulda-context%2Cshoulda-matchers%2Csignet%2Csinatra%2Csqlite3%2Cvirtus%2Cwasabi%2Cxmlrpc
Query List: ["SexpProcessor", "arel", "activerecord-deprecated_finders", "bones-rcov", "bones-rubyforge", "bones-rspec", "bones-zentest", "git", "ast", "pattern-match", "debugger", "cdb-full", "tokyocabinet", "docile", "simplecov-html", "win32-file-stat", "unf", "os", "socksify", "pyu-ntlm-http", "ntlm-http", "ruby-maven", "metaclass", "curb", "ansi", "uber", "declarative", "hooks", "declarative-option", "bourne", "tilt", "rack-protection", "mustermann", "shotgun", "rack-test", "descendants_tracker", "axiom-types", "coercible", "equalizer"]
Query Gemcutter Dependency Endpoint API: SexpProcessor,arel,activerecord-deprecated_finders,bones-rcov,bones-rubyforge,bones-rspec,bones-zentest,git,ast,pattern-match,debugger,cdb-full,tokyocabinet,docile,simplecov-html,win32-file-stat,unf,os,socksify,pyu-ntlm-http,ntlm-http,ruby-maven,metaclass,curb,ansi,uber,declarative,hooks,declarative-option,bourne,tilt,rack-protection,mustermann,shotgun,rack-test,descendants_tracker,axiom-types,coercible,equalizer
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=SexpProcessor%2Cactiverecord-deprecated_finders%2Cansi%2Carel%2Cast%2Caxiom-types%2Cbones-rcov%2Cbones-rspec%2Cbones-rubyforge%2Cbones-zentest%2Cbourne%2Ccdb-full%2Ccoercible%2Ccurb%2Cdebugger%2Cdeclarative%2Cdeclarative-option%2Cdescendants_tracker%2Cdocile%2Cequalizer%2Cgit%2Chooks%2Cmetaclass%2Cmustermann%2Cntlm-http%2Cos%2Cpattern-match%2Cpyu-ntlm-http%2Crack-protection%2Crack-test%2Cruby-maven%2Cshotgun%2Csimplecov-html%2Csocksify%2Ctilt%2Ctokyocabinet%2Cuber%2Cunf%2Cwin32-file-stat
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=SexpProcessor%2Cactiverecord-deprecated_finders%2Cansi%2Carel%2Cast%2Caxiom-types%2Cbones-rcov%2Cbones-rspec%2Cbones-rubyforge%2Cbones-zentest%2Cbourne%2Ccdb-full%2Ccoercible%2Ccurb%2Cdebugger%2Cdeclarative%2Cdeclarative-option%2Cdescendants_tracker%2Cdocile%2Cequalizer%2Cgit%2Chooks%2Cmetaclass%2Cmustermann%2Cntlm-http%2Cos%2Cpattern-match%2Cpyu-ntlm-http%2Crack-protection%2Crack-test%2Cruby-maven%2Cshotgun%2Csimplecov-html%2Csocksify%2Ctilt%2Ctokyocabinet%2Cuber%2Cunf%2Cwin32-file-stat
Query List: ["ice_nine", "columnize", "debugger-ruby_core_source", "debugger-linecache", "ruby_core_source", "adamantium", "tool", "escape_utils", "ruby-maven-libs", "maven-tools", "unf_ext"]
Query Gemcutter Dependency Endpoint API: ice_nine,columnize,debugger-ruby_core_source,debugger-linecache,ruby_core_source,adamantium,tool,escape_utils,ruby-maven-libs,maven-tools,unf_ext
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=adamantium%2Ccolumnize%2Cdebugger-linecache%2Cdebugger-ruby_core_source%2Cescape_utils%2Cice_nine%2Cmaven-tools%2Cruby-maven-libs%2Cruby_core_source%2Ctool%2Cunf_ext
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=adamantium%2Ccolumnize%2Cdebugger-linecache%2Cdebugger-ruby_core_source%2Cescape_utils%2Cice_nine%2Cmaven-tools%2Cruby-maven-libs%2Cruby_core_source%2Ctool%2Cunf_ext
Query List: ["memoizable"]
Query Gemcutter Dependency Endpoint API: memoizable
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=memoizable
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=memoizable
Query List: []
Double checking for ["bundler"] in rubygems repository https://rubygems.org/ or installed locally
Fetching gem metadata from https://rubygems.org/
HTTP GET https://index.rubygems.org/api/v1/dependencies
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies
Query List: ["bundler"]
Query Gemcutter Dependency Endpoint API: bundler
HTTP GET https://index.rubygems.org/api/v1/dependencies?gems=bundler
HTTP 200 OK https://index.rubygems.org/api/v1/dependencies?gems=bundler
Query List: []
Resolving dependencies...
Using public_suffix 3.0.2
0:  public_suffix (3.0.2) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/public_suffix-3.0.2.gemspec
Using addressable 2.5.2
0:  addressable (2.5.2) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/addressable-2.5.2.gemspec
Using buff-extensions 2.0.0
0:  buff-extensions (2.0.0) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/buff-extensions-2.0.0.gemspec
Using hashie 3.5.7
0:  hashie (3.5.7) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/hashie-3.5.7.gemspec
Using varia_model 0.6.0
0:  varia_model (0.6.0) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/varia_model-0.6.0.gemspec
Using buff-config 2.0.0
0:  buff-config (2.0.0) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/buff-config-2.0.0.gemspec
Using bundler 1.16.1
0:  bundler (1.16.1) from /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/gems/2.3.0/specifications/default/bundler-1.16.1.gemspec
Using fuzzyurl 0.9.0
0:  fuzzyurl (0.9.0) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/fuzzyurl-0.9.0.gemspec
Using tomlrb 1.2.6
0:  tomlrb (1.2.6) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/tomlrb-1.2.6.gemspec
Using mixlib-config 2.2.6
0:  mixlib-config (2.2.6) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/mixlib-config-2.2.6.gemspec
Using mixlib-shellout 2.3.2
0:  mixlib-shellout (2.3.2) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/mixlib-shellout-2.3.2.gemspec
Using chef-config 14.0.190
0:  chef-config (14.0.190) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/chef-config-14.0.190.gemspec
Using libyajl2 1.2.0
0:  libyajl2 (1.2.0) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/libyajl2-1.2.0.gemspec
Using ffi-yajl 2.3.1
0:  ffi-yajl (2.3.1) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/ffi-yajl-2.3.1.gemspec
Using mixlib-log 2.0.3
0:  mixlib-log (2.0.3) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/mixlib-log-2.0.3.gemspec
Using rack 2.0.4
0:  rack (2.0.4) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/rack-2.0.4.gemspec
Using uuidtools 2.1.5
0:  uuidtools (2.1.5) from /Users/lamont/.rvm/gems/ruby-2.3.7/specifications/uuidtools-2.1.5.gemspec
Fetching chef-zero 14.0.1
Installing chef-zero 14.0.1
Gem::RuntimeRequirementNotMetError: chef-zero requires Ruby version >= 2.4.3. The current ruby version is 2.3.0.
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/rubygems/installer.rb:619:in `ensure_required_ruby_version_met'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/rubygems/installer.rb:851:in `pre_install_checks'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/rubygems_gem_installer.rb:18:in `pre_install_checks'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/rubygems/installer.rb:281:in `install'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/source/rubygems.rb:153:in `block in install'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/rubygems_integration.rb:217:in `preserve_paths'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/source/rubygems.rb:142:in `install'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/installer/gem_installer.rb:56:in `install'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/installer/gem_installer.rb:16:in `install_from_spec'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/installer/parallel_installer.rb:162:in `do_install'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/installer/parallel_installer.rb:147:in `install_serially'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/installer/parallel_installer.rb:102:in `call'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/installer/parallel_installer.rb:78:in `call'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/installer.rb:258:in `install_in_parallel'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/installer.rb:194:in `install'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/installer.rb:91:in `block in run'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/process_lock.rb:12:in `block in lock'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/process_lock.rb:9:in `open'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/process_lock.rb:9:in `lock'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/installer.rb:72:in `run'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/installer.rb:25:in `install'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/cli/install.rb:65:in `run'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/cli.rb:224:in `block in install'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/settings.rb:136:in `temporary'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/cli.rb:223:in `install'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/vendor/thor/lib/thor.rb:387:in `dispatch'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/cli.rb:27:in `dispatch'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/vendor/thor/lib/thor/base.rb:466:in `start'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/cli.rb:18:in `start'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/gems/2.3.0/gems/bundler-1.16.1/exe/bundle:30:in `block in <top (required)>'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/site_ruby/2.3.0/bundler/friendly_errors.rb:122:in `with_friendly_errors'
  /Users/lamont/.rvm/rubies/ruby-2.3.7/lib/ruby/gems/2.3.0/gems/bundler-1.16.1/exe/bundle:22:in `<top (required)>'
  /Users/lamont/.rvm/gems/ruby-2.3.7/bin/bundle:23:in `load'
  /Users/lamont/.rvm/gems/ruby-2.3.7/bin/bundle:23:in `<main>'
  /Users/lamont/.rvm/gems/ruby-2.3.7/bin/ruby_executable_hooks:15:in `eval'
  /Users/lamont/.rvm/gems/ruby-2.3.7/bin/ruby_executable_hooks:15:in `<main>'

An error occurred while installing chef-zero (14.0.1), and Bundler cannot continue.
Make sure that `gem install chef-zero -v '14.0.1'` succeeds before bundling.

In Gemfile:
  berkshelf was resolved to 6.3.1, which depends on
    chef was resolved to 14.0.190, which depends on
      chef-zero

@lamont-granquist
Copy link
Contributor Author

The psych 416 may be the root cause?

@lamont-granquist
Copy link
Contributor Author

I'm not familiar with the endpoints, but it kind of looks like the info/chef endpoint pulls down a list of all gems that chef has ever depended on? I don't think we currently have any dep on psych because I can't grep it in our Gemfile.lock, and I see a pile of fog deps there which must date back to 2010-ish ancient times when those got first split out into knife gems and then we migrated most of those off of fog...

@lamont-granquist
Copy link
Contributor Author

Don't see psych as a current dep of berkshelf either in its Gemfile/Gemfile.lock/gemspec

@segiddins
Copy link
Member

kind of looks like the info/chef endpoint pulls down a list of all gems that chef has ever depended on

that's correct

The psych 416 may be the root cause?

yes, anything that causes bundler to need to fallback to the old dependency API would cause this

@colby-swandale
Copy link
Member

@segiddins is there any actions for this issue?

@segiddins
Copy link
Member

Not really :(

@lamont-granquist
Copy link
Contributor Author

Would it be possible to have the latest gemspec for a gem identify a floor below which versions are deprecated (or some other word which means "too old to consider in clever dependency solutions") and the info/chef endpoint would prune out all the information from those versions? Then if it fails to find a solution it could fall back to the old dependency API...

Alternatively I supposed we could yank all the chef versions before chef 11.0.0 or something, but that makes my eyelid twitch a bit thinking of nuking history like that. Someone out there is also likely happily using chef 0.10.x from 2011 and we'd break them hard...

@segiddins
Copy link
Member

Would it be possible to have the latest gemspec for a gem identify a floor below which versions are deprecated (or some other word which means "too old to consider in clever dependency solutions")

Possible? Maybe. Probable? I doubt this would ever get implemented, sorry.

In theory, there shouldn't be any issues since bundler caches all of the info files locally, RubyGems.org shouldn't be failing on these requests

@colby-swandale
Copy link
Member

This seems answered.

@deivid-rodriguez
Copy link
Member

deivid-rodriguez commented Oct 3, 2018

Hi! I come here after reading https://github.com/rspec/rspec/issues/25. Unfortunately the "conclusion" of that thread (as I understand it) is that it's risky for gems to drop support for older rubies, because bundler will continue to try to install the latest version and ignore the required_ruby_version specification in the gemspec.

This is certainly not true in the great majority of the cases, but it is in this particular case, and I think we could do better. I tried reproducing the issue, and while I couldn't reproduce the 416 error, the installation failed for me due to the Net::HTTPTooManyRequests @segiddins mentioned.

I think we could fix that case by falling back to sequentially fetching dependencies from the compact index when this happens instead of doing it in parallel. I tried a proof of concept of this approach and it fixed the issue just fine. Thoughts on this?

ghost pushed a commit that referenced this issue Mar 8, 2019
6728: Fallback to sequentially fetching specs on 429s r=indirect a=deivid-rodriguez

### What was the end-user problem that led to this PR?

The problem is that sometimes `bundler` is unable to resolve certain gemfiles. Specifically, sometimes it does not respect the `required_ruby_version` setting. This causes some people to assume that `bundler` will always try to install the latest version of any dependency, regardless of the ruby version being run, because as a matter of fact, this feature sometimes just doesn't work. See for example the discussion at https://github.com/rspec/rspec/issues/25.

The problem was consistently reproducible until a few minutes ago with the following `Gemfile` under `ruby 2.3.7`

```ruby
source "https://rubygems.org"
ruby "2.3.7"
gem "berkshelf", "= 6.3.1"
```

```
$ docker run -it --rm --volume $(pwd):/app ruby:2.3.7 sh -c "cd /app && rm -f Gemfile.lock && bundle install"
Fetching gem metadata from https://rubygems.org/.............
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies....
Fetching public_suffix 3.0.3
Installing public_suffix 3.0.3
Fetching addressable 2.5.2
Installing addressable 2.5.2
Fetching buff-extensions 2.0.0
Installing buff-extensions 2.0.0
Fetching hashie 3.6.0
Installing hashie 3.6.0
Fetching varia_model 0.6.0
Installing varia_model 0.6.0
Fetching buff-config 2.0.0
Installing buff-config 2.0.0
Using bundler 1.16.5
Fetching fuzzyurl 0.9.0
Installing fuzzyurl 0.9.0
Fetching tomlrb 1.2.7
Installing tomlrb 1.2.7
Fetching mixlib-config 2.2.13
Installing mixlib-config 2.2.13
Fetching mixlib-shellout 2.4.0
Installing mixlib-shellout 2.4.0
Fetching chef-config 14.5.33
Installing chef-config 14.5.33
Fetching libyajl2 1.2.0
Installing libyajl2 1.2.0 with native extensions
Fetching ffi-yajl 2.3.1
Installing ffi-yajl 2.3.1 with native extensions
Fetching mixlib-log 2.0.4
Installing mixlib-log 2.0.4
Fetching rack 2.0.5
Installing rack 2.0.5
Fetching uuidtools 2.1.5
Installing uuidtools 2.1.5
Fetching chef-zero 14.0.6
Installing chef-zero 14.0.6
Gem::RuntimeRequirementNotMetError: chef-zero requires Ruby version >= 2.4.0. The current ruby version is 2.3.0.
An error occurred while installing chef-zero (14.0.6), and Bundler cannot continue.
Make sure that `gem install chef-zero -v '14.0.6' --source 'https://rubygems.org/'` succeeds before bundling.

In Gemfile:
  berkshelf was resolved to 6.3.1, which depends on
    chef was resolved to 14.5.33, which depends on
      chef-zero
```

Funny enough, I can no longer reproduce it at the moment, I guess it depends on the specific load conditions of the rubygems.org servers?

### What was your diagnosis of the problem?

My diagnosis was that sometimes our resolution falls back to the old dependency API that didn't implement the `required_ruby_version` setting. In particular, this happens because the new API returns `Net::HTTPTooManyRequests`, so `bundler` gives up and defaults to the old API.

### What is your fix for the problem, implemented in this PR?

My fix is to, instead of directly fall back to the old API when rate limiting happens, try first to fetch the dependencies sequentially instead of in parallel still from the new API, so that rate limit does not affect us.

### Why did you choose this fix out of the possible options?

I chose this fix because it was the only idea that came up. As a matter of fact, #6471 and #6639 were closed because there was nothing we could do, so it seems like it's the only idea so far :)

Co-authored-by: David Rodríguez <deivid.rodriguez@riseup.net>
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants