From f9e86f1bf5de382f878ce7977381c96fcaa97451 Mon Sep 17 00:00:00 2001 From: Mike Dalessio Date: Wed, 17 Jul 2024 02:14:31 -0400 Subject: [PATCH] Improve how the sessions generator adds `bcrypt` (#52346) * doc: fix CHANGELOG message for sessions generator * fix: Sessions generator adds bcrypt more robustly Use Thor's `uncomment_lines` instead of `gsub_file`. If the Gemfile does not contain bcrypt, either commented or uncommented, then run `bundle add bcrypt`. Make sure all bundler commands run within `Bundler.with_original_env` to avoid bundler resolution problems while trying to resolve bundler dependencies. Typically the failure mode here is seeing: > Could not find bcrypt-3.1.20 in cached gems or installed locally (Bundler::GemNotFound) while bootstrapping the process that will run bundle-install or bundle-add. --- railties/CHANGELOG.md | 2 +- .../generators/rails/sessions/sessions_generator.rb | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md index fb25e175b1..296735e8b0 100644 --- a/railties/CHANGELOG.md +++ b/railties/CHANGELOG.md @@ -2,7 +2,7 @@ # Generate with... - bin/rails sessions + bin/rails generate sessions # Generated files app/models/current.rb diff --git a/railties/lib/rails/generators/rails/sessions/sessions_generator.rb b/railties/lib/rails/generators/rails/sessions/sessions_generator.rb index 699529c02d..21ed420471 100644 --- a/railties/lib/rails/generators/rails/sessions/sessions_generator.rb +++ b/railties/lib/rails/generators/rails/sessions/sessions_generator.rb @@ -20,9 +20,12 @@ def configure_application end def enable_bcrypt - # FIXME: Make more resilient in case the default comment has been removed - gsub_file "Gemfile", /# gem "bcrypt"/, 'gem "bcrypt"' - execute_command :bundle, "" + if File.read("Gemfile").include?('gem "bcrypt"') + uncomment_lines "Gemfile", /gem "bcrypt"/ + Bundler.with_original_env { execute_command :bundle, "" } + else + Bundler.with_original_env { execute_command :bundle, "add bcrypt" } + end end def add_migrations