From 54b516e68481da29f70939f5f96e7a81d801c9ba Mon Sep 17 00:00:00 2001 From: Alexander Popov Date: Thu, 20 Feb 2020 15:22:30 +0300 Subject: [PATCH] Replace deprecated `Bundler.with_clean_env` with `with_unbundled_env` Also add tests for `GEM_HOME` environment variable preserving. Also drop `BUNDLE_GEMFILE` preserving, resolve #2133 Also disable local `path` for `bundle install` in CI, it makes `nio4r` unavailable. Also install (update) `bundler` in CI, old versions are incompatible. --- .github/workflows/ruby.yml | 5 +++-- History.md | 1 + lib/puma/launcher.rb | 8 +++----- test/bundle_preservation_test/config.ru | 12 +++++++++++- test/test_preserve_bundler_env.rb | 11 ++++++++--- 5 files changed, 26 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ruby.yml b/.github/workflows/ruby.yml index 24751310f6..f66cdb22b5 100644 --- a/.github/workflows/ruby.yml +++ b/.github/workflows/ruby.yml @@ -39,9 +39,10 @@ jobs: if: matrix.ruby < '2.3' run: | gem update --system 2.7.10 --no-document + gem install bundler - name: bundle install - run: bundle install --jobs 4 --retry 3 --path=.bundle/puma + run: bundle install --jobs 4 --retry 3 - name: compile run: bundle exec rake compile @@ -87,7 +88,7 @@ jobs: ruby-version: ${{ matrix.ruby }} - name: bundle install - run: bundle install --jobs 4 --retry 3 --path=.bundle/puma + run: bundle install --jobs 4 --retry 3 - name: compile if: matrix.ruby >= '2.4' diff --git a/History.md b/History.md index 2555344dc4..abaf77d511 100644 --- a/History.md +++ b/History.md @@ -17,6 +17,7 @@ * Preserve `BUNDLE_GEMFILE` env var when using `prune_bundler` (#1893) * Send 408 request timeout even when queue requests is disabled (#2119) * Rescue IO::WaitReadable instead of EAGAIN for blocking read (#2121) + * Replace deprecated `Bundler.with_clean_env` with `with_unbundled_env` (#2120) * Refactor * Remove unused loader argument from Plugin initializer (#2095) diff --git a/lib/puma/launcher.rb b/lib/puma/launcher.rb index 2e92709eee..226a59e3bb 100644 --- a/lib/puma/launcher.rb +++ b/lib/puma/launcher.rb @@ -297,11 +297,9 @@ def prune_bundler deps, dirs = dependencies_and_files_to_require_after_prune log '* Pruning Bundler environment' - home = ENV['GEM_HOME'] - bundle_gemfile = ENV['BUNDLE_GEMFILE'] - Bundler.with_clean_env do - ENV['GEM_HOME'] = home - ENV['BUNDLE_GEMFILE'] = bundle_gemfile + gem_home = ENV['GEM_HOME'] + Bundler.with_unbundled_env do + ENV['GEM_HOME'] = gem_home ENV['PUMA_BUNDLER_PRUNED'] = '1' args = [Gem.ruby, puma_wild_location, '-I', dirs.join(':'), deps.join(',')] + @original_argv # Ruby 2.0+ defaults to true which breaks socket activation diff --git a/test/bundle_preservation_test/config.ru b/test/bundle_preservation_test/config.ru index 1f0f2cc619..35bff76d83 100644 --- a/test/bundle_preservation_test/config.ru +++ b/test/bundle_preservation_test/config.ru @@ -1 +1,11 @@ -run lambda { |env| [200, {'Content-Type'=>'text/plain'}, [ENV['BUNDLE_GEMFILE'].inspect]] } +run( + lambda do |env| + [ + 200, + {'Content-Type'=>'text/plain'}, + [ + [ENV['BUNDLE_GEMFILE'], ENV['GEM_HOME']].inspect + ] + ] + end +) diff --git a/test/test_preserve_bundler_env.rb b/test/test_preserve_bundler_env.rb index 1dd1b43447..b9e4c2531e 100644 --- a/test/test_preserve_bundler_env.rb +++ b/test/test_preserve_bundler_env.rb @@ -12,9 +12,12 @@ def test_usr2_restart_preserves_bundler_environment skip_unless_signal_exist? :USR2 @tcp_port = UniquePort.call + gem_home = "/home/bundle_env_preservation_test" + bundle_gemfile = "Gemfile.bundle_env_preservation_test" env = { + "GEM_HOME" => gem_home, # Intentionally set this to something we wish to keep intact on restarts - "BUNDLE_GEMFILE" => "Gemfile.bundle_env_preservation_test", + "BUNDLE_GEMFILE" => bundle_gemfile, # Don't allow our (rake test's) original env to interfere with the child process "BUNDLER_ORIG_BUNDLE_GEMFILE" => nil } @@ -27,9 +30,11 @@ def test_usr2_restart_preserves_bundler_environment @pid = @server.pid connection = connect initial_reply = read_body(connection) - assert_match("Gemfile.bundle_env_preservation_test", initial_reply) + refute_match(bundle_gemfile, initial_reply) + assert_match(gem_home, initial_reply) restart_server connection new_reply = read_body(connection) - assert_match("Gemfile.bundle_env_preservation_test", new_reply) + refute_match(bundle_gemfile, new_reply) + assert_match(gem_home, initial_reply) end end