From be5eeb1a06d1608f89fd35dd9bd4f9d0c4be0a45 Mon Sep 17 00:00:00 2001 From: Jonathan Hefner Date: Sun, 6 Sep 2020 14:40:14 -0500 Subject: [PATCH] Load Rails tasks for each new Rake::Application Follow-up to #40143. Rails Rake tasks are loaded for each new `Rake::Application` instance via `Rails.application.load_tasks`. However, under the hood, `Rails.application.load_tasks` used `require` instead of `load`, which caused Rails tasks to be loaded for only the first `Rake::Application` instance. This commit changes the relevant `require` to `load`. Fixes #40184. --- railties/lib/rails/application.rb | 2 +- railties/test/application/rake_test.rb | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/railties/lib/rails/application.rb b/railties/lib/rails/application.rb index 649bd72bd5..d95c0ce75d 100644 --- a/railties/lib/rails/application.rb +++ b/railties/lib/rails/application.rb @@ -514,7 +514,7 @@ module Rails def run_tasks_blocks(app) #:nodoc: railties.each { |r| r.run_tasks_blocks(app) } super - require "rails/tasks" + load "rails/tasks.rb" task :environment do ActiveSupport.on_load(:before_initialize) { config.eager_load = config.rake_eager_load } diff --git a/railties/test/application/rake_test.rb b/railties/test/application/rake_test.rb index 9cb908d12f..fdb4da55e2 100644 --- a/railties/test/application/rake_test.rb +++ b/railties/test/application/rake_test.rb @@ -29,6 +29,18 @@ module ApplicationTests assert_equal ["Rails version"], rails("about").scan(/^Rails version/) end + test "tasks can invoke framework tasks via Rails::Command.invoke" do + add_to_config <<~RUBY + rake_tasks do + task :invoke_about do + Rails::Command.invoke :about + end + end + RUBY + + assert_match(/^Rails version/, rails("invoke_about")) + end + test "task backtrace is silenced" do add_to_config <<-RUBY rake_tasks do