From 95b3b31617643eb625eeff04415ceb4bcad6aea2 Mon Sep 17 00:00:00 2001 From: Hartley McGuire Date: Wed, 22 Feb 2023 21:49:44 -0500 Subject: [PATCH] Fix parsing ruby version for Dockerfile packages Previously, the version regular expressions never matched Gem.ruby_version because Gem::Version is not a string. In addition, ruby_version was undefined and this was not caught before because the case statement never evaluated those branches. This commit fixes both of those issues, so that ruby versions like 2.7.0 will correctly install "python" instead of "python-is-python3" --- railties/lib/rails/generators/app_base.rb | 10 +++++----- railties/test/generators/app_generator_test.rb | 11 +++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/railties/lib/rails/generators/app_base.rb b/railties/lib/rails/generators/app_base.rb index e0c34699fd..17202a1a49 100644 --- a/railties/lib/rails/generators/app_base.rb +++ b/railties/lib/rails/generators/app_base.rb @@ -520,11 +520,11 @@ def dockerfile_build_packages # how python is installed with the bullseye release. Below # is based on debian release included with the Ruby images on # Dockerhub. - case Gem.ruby_version - when /^2.7/ - bullseye = ruby_version >= "2.7.4" - when /^3.0/ - bullseye = ruby_version >= "3.0.2" + case Gem.ruby_version.to_s + when /^2\.7/ + bullseye = Gem.ruby_version >= "2.7.4" + when /^3\.0/ + bullseye = Gem.ruby_version >= "3.0.2" else bullseye = true end diff --git a/railties/test/generators/app_generator_test.rb b/railties/test/generators/app_generator_test.rb index a116c0f867..953f9be239 100644 --- a/railties/test/generators/app_generator_test.rb +++ b/railties/test/generators/app_generator_test.rb @@ -1047,6 +1047,17 @@ def test_dockerfile end end + def test_old_rubies_do_not_use_bullseye_python + Gem.stub(:ruby_version, Gem::Version.new("2.7.0")) do + run_generator [destination_root, "--js=esbuild"] + end + + assert_file "Dockerfile" do |content| + assert_match(/python/, content) + assert_no_match(/python-is-python3/, content) + end + end + def test_skip_docker run_generator [destination_root, "--skip-docker"]