mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Load Rails Rake tasks only once
In #39137, a new `Rake::Application` instance was created per Rake command invocation. To ensure that the Rails tasks were defined for each `Rake::Application`, `rails/tasks.rb` was loaded per instance. However, `Rake::Application#load_rakefile` loads the application's Rakefile, which should invoke `Rails.application.load_tasks`, which, in turn, also loads the Rails tasks. When a Rake task is defined more than once, all definition blocks are executed when the task is run. Hence, Rails task blocks were being executed twice. This commit removes the unnecessary load and avoids double execution. Fixes #40136.
This commit is contained in:
parent
7101489293
commit
85c5e82935
2 changed files with 4 additions and 1 deletions
|
@ -16,7 +16,6 @@ module Rails
|
||||||
require_rake
|
require_rake
|
||||||
|
|
||||||
Rake.with_application do |rake|
|
Rake.with_application do |rake|
|
||||||
load "rails/tasks.rb"
|
|
||||||
rake.init("rails", [task, *args])
|
rake.init("rails", [task, *args])
|
||||||
rake.load_rakefile
|
rake.load_rakefile
|
||||||
if Rails.respond_to?(:root)
|
if Rails.respond_to?(:root)
|
||||||
|
|
|
@ -25,6 +25,10 @@ module ApplicationTests
|
||||||
assert $task_loaded
|
assert $task_loaded
|
||||||
end
|
end
|
||||||
|
|
||||||
|
test "framework tasks are evaluated only once" do
|
||||||
|
assert_equal ["Rails version"], rails("about").scan(/^Rails version/)
|
||||||
|
end
|
||||||
|
|
||||||
test "task backtrace is silenced" do
|
test "task backtrace is silenced" do
|
||||||
add_to_config <<-RUBY
|
add_to_config <<-RUBY
|
||||||
rake_tasks do
|
rake_tasks do
|
||||||
|
|
Loading…
Reference in a new issue