mirror of
https://github.com/puma/puma.git
synced 2022-11-09 13:48:40 -05:00
Preserve BUNDLE_APP_CONFIG on worker fork (#2688)
Without this, if puma is launched with BUNDLE_APP_CONFIG set, that will be lost inside of unbundled_env, which causes the worker processes to use a potentially different bundler configuration.
This commit is contained in:
parent
35194c575b
commit
3c5d12db6b
5 changed files with 27 additions and 0 deletions
|
@ -319,10 +319,12 @@ module Puma
|
|||
log '* Pruning Bundler environment'
|
||||
home = ENV['GEM_HOME']
|
||||
bundle_gemfile = Bundler.original_env['BUNDLE_GEMFILE']
|
||||
bundle_app_config = Bundler.original_env['BUNDLE_APP_CONFIG']
|
||||
with_unbundled_env do
|
||||
ENV['GEM_HOME'] = home
|
||||
ENV['BUNDLE_GEMFILE'] = bundle_gemfile
|
||||
ENV['PUMA_BUNDLER_PRUNED'] = '1'
|
||||
ENV["BUNDLE_APP_CONFIG"] = bundle_app_config
|
||||
args = [Gem.ruby, puma_wild_location, '-I', dirs.join(':')] + @original_argv
|
||||
# Ruby 2.0+ defaults to true which breaks socket activation
|
||||
args += [{:close_others => false}]
|
||||
|
|
2
test/bundle_app_config_test/.bundle/config
Normal file
2
test/bundle_app_config_test/.bundle/config
Normal file
|
@ -0,0 +1,2 @@
|
|||
---
|
||||
BUNDLE_PATH: "vendor/bundle"
|
1
test/bundle_app_config_test/Gemfile
Normal file
1
test/bundle_app_config_test/Gemfile
Normal file
|
@ -0,0 +1 @@
|
|||
gem 'puma', path: '../..'
|
1
test/bundle_app_config_test/config.ru
Normal file
1
test/bundle_app_config_test/config.ru
Normal file
|
@ -0,0 +1 @@
|
|||
run lambda { |env| [200, {"Content-Type" => "text/plain"}, ["Hello World"]] }
|
|
@ -39,6 +39,27 @@ class TestPreserveBundlerEnv < TestIntegration
|
|||
assert_match("Gemfile.bundle_env_preservation_test", new_reply)
|
||||
end
|
||||
|
||||
def test_worker_forking_preserves_bundler_config_path
|
||||
skip_unless_signal_exist? :TERM
|
||||
|
||||
@tcp_port = UniquePort.call
|
||||
env = {
|
||||
# Disable the .bundle/config file in the bundle_app_config_test directory
|
||||
"BUNDLE_APP_CONFIG" => "/dev/null",
|
||||
# Don't allow our (rake test's) original env to interfere with the child process
|
||||
"BUNDLE_GEMFILE" => nil,
|
||||
"BUNDLER_ORIG_BUNDLE_GEMFILE" => nil
|
||||
}
|
||||
cmd = "bundle exec puma -q -w 1 --prune-bundler -b tcp://#{HOST}:#{@tcp_port}"
|
||||
Dir.chdir File.expand_path("bundle_app_config_test", __dir__) do
|
||||
@server = IO.popen(env, cmd.split, "r")
|
||||
end
|
||||
wait_for_server_to_boot
|
||||
@pid = @server.pid
|
||||
reply = read_body(connect)
|
||||
assert_equal("Hello World", reply)
|
||||
end
|
||||
|
||||
def test_phased_restart_preserves_unspecified_bundle_gemfile
|
||||
skip_unless_signal_exist? :USR1
|
||||
|
||||
|
|
Loading…
Reference in a new issue