-
Notifications
You must be signed in to change notification settings - Fork 21.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Facilitate use of any regular ERB in database.yml #46134
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for the PR @eikes. It looks like this will work and I've verified there is no performance difference.
I've left some comments for things to change, mainly around wording and style.
08c991f
to
b96a395
Compare
@eileencodes Thank you for reviewing this so quickly. I addressed all your requested changes. |
b96a395
to
6068048
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
One last change, otherwise this looks good to me.
Commit 37d1429 introduced the DummyERB to avoid loading the environment when running `rake -T`. The DummyCompiler simply replaced all output from `<%=` with a fixed string and removed everything else. This worked okay when it was used for YAML values. When using `<%=` within a YAML key, it caused an error in the YAML parser, making it impossible to use ERB as you would expect. For example a `database.yml` file containing the following should be possible: development: <% 5.times do |i| %> shard_<%= i %>: database: db/development_shard_<%= i %>.sqlite3 adapter: sqlite3 <% end %> Instead of using a broken ERB compiler we can temporarily use a `Rails.application.config` that does not raise an error when configurations are accessed which have not been set as described in rails#35468. This change removes the `DummyCompiler` and uses the standard `ERB::Compiler`. It introduces the `DummyConfig` which delegates all known configurations to the real `Rails::Application::Configuration` instance and returns a dummy string for everything else. This restores the full ERB capabilities without compromising on speed when generating the rake tasks for multiple databases. Deprecates `config.active_record.suppress_multiple_database_warning`.
6068048
to
5ba8aa5
Compare
Thank you @eikes! |
Commit 37d1429 (#35497) introduced the
DummyERB
to avoid loading the environment when runningrake -T
.The
DummyCompiler
simply replaced all output from<%=
with a fixed string and removed everything else. This worked okay when it was used for YAML values. When using<%=
within a YAML key, it caused an error in the YAML parser, making it impossible to use ERB as you would expect. For examplea database.yml
file containing the following should be possible:Instead of using a broken ERB compiler we can temporarily use a
Rails.application.config
that does not raise an error when configurations are accessed which have not been set as described in #35468.This change removes the
DummyCompiler
and uses the standardERB::Compiler
. It introduces theDummyConfig
which delegates all known configurations to the realRails::Application::Configuration
instance and returns a dummy string for everything else. This restores the full ERB capabilities without compromising on speed when generating the rake tasks for multiple databases.Deprecates
config.active_record.suppress_multiple_database_warning
.