diff --git a/plugins/commands/plugin/gem_helper.rb b/plugins/commands/plugin/gem_helper.rb index 8d9c24fb1..b937570b8 100644 --- a/plugins/commands/plugin/gem_helper.rb +++ b/plugins/commands/plugin/gem_helper.rb @@ -1,4 +1,5 @@ require "rubygems" +require "rubygems/config_file" require "rubygems/gem_runner" require "log4r" @@ -26,6 +27,11 @@ module VagrantPlugins # Clear paths so that it reads the new GEM_HOME setting Gem.paths = ENV + # Set a custom configuration to avoid loading ~/.gemrc loads and + # /etc/gemrc and so on. + old_config = Gem.configuration + Gem.configuration = NilGemConfig.new + # Clear the sources so that installation uses custom sources old_sources = Gem.sources Gem.sources = Gem.default_sources @@ -41,9 +47,28 @@ module VagrantPlugins ENV["GEM_PATH"] = old_gem_path # Reset everything + Gem.configuration = old_config Gem.paths = ENV Gem.sources = old_sources.to_a end + + # This is pretty hacky but it is a custom implementatin of + # Gem::ConfigFile so that we don't load any gemrc files. + class NilGemConfig < Gem::ConfigFile + def initialize + # We _can not_ `super` here because that can really mess up + # some other configuration state. We need to just set everything + # directly. + + @api_keys = {} + @args = [] + @backtrace = false + @bulk_threshold = 1000 + @hash = {} + @update_sources = true + @verbose = true + end + end end end end