Skip to content

Conversation

G-Rath
Copy link
Contributor

@G-Rath G-Rath commented Feb 19, 2024

So it turns out that gsub_file does not actually check if it matched anything and so we have a few misc. changes silently not being applied due to changes in Rails 7.1.

This addresses that by switching us to use gsub_file! which reads the file into memory before it's gsub'd and then compares the results to make sure it actually changed.

I've opened rails/thor#874 to add this to Thor itself

Comment on lines -18 to -20
gsub_file "config/environments/development.rb",
"join('tmp', 'caching-dev.txt')",
'join("tmp/caching-dev.txt")'
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note: this is no longer matching because of the quotes, but Rubocop can automatically fix this anyway now

config.force_ssl = ENV.fetch("RAILS_FORCE_SSL", "true").downcase != "false"
RUBY
gsub_file! "config/environments/production.rb",
"config.force_ssl = true",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note: Rails 7.1 now ships with this just enabled, but I think it's worth us keeping an env variable for toggling it just in case

gsub_file "config/initializers/filter_parameter_logging.rb", /\[:password\]/ do
"%w[password secret session cookie csrf]"
end
gsub_file! "config/initializers/filter_parameter_logging.rb",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note: this relates to #529 - technically I've fixed this gsub so we're now adding to the existing values, but we still want to re-review our options

Comment on lines -1 to -3
gsub_file "config/environments/test.rb",
"config.eager_load = false",
"config.eager_load = defined?(SimpleCov).present?"
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

note: Rails 7.1 has changed this to ENV["CI"].present? rather than true

I don't think it's better to check if SimpleCov is defined but maybe I'm wrong?

@G-Rath G-Rath merged commit dd5b3e9 into main Mar 8, 2024
@G-Rath G-Rath deleted the fix-gsub branch March 8, 2024 22:26
G-Rath added a commit that referenced this pull request Mar 27, 2025
The file manipulation methods provided by Thor don't stop execution when
they fail to do the defined manipulation, instead in our case they print
an error but then proceed; we actually want to error in this situation
since the whole point of our template is to be applying our preferred
practices meaning its moot if we don't...

This really came into light with the Rails 8 upgrade which had a number
of changes to the configuration files in particular that caused a number
of our customizations to be skipped.

By introducing bang versions of the methods that error if the file
contents does not change, we can ensure going forward all manipulations
actually work; this uses the same logic I introduced in #533 for
`gsub_file`, and caught a bug that I fixed in #596
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants