mirror of
https://github.com/github/rails.git
synced 2026-01-10 07:07:54 -05:00
Merge pull request #7695 from benolee/backport_cc7dd66_and_c0ba0f0
backport runner fixes to 3-2-stable Conflicts: railties/CHANGELOG.md
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
## unreleased ##
|
||||
|
||||
* Require ActiveRecord::Base in railtie hooks for rake_tasks, console and runner to
|
||||
avoid circular constant loading issues. [Backport #7695] [Fixes #7683 and #882] *Ben Holley*
|
||||
|
||||
* Maintain context for joins within ActiveRecord::Relation merges.
|
||||
Backport #10164.
|
||||
|
||||
*Neeraj Singh + Andrew Horner*
|
||||
|
||||
|
||||
* Make sure the `EXPLAIN` command is never triggered by a `select_db` call.
|
||||
|
||||
*Daniel Schierbeck*
|
||||
|
||||
@@ -30,6 +30,7 @@ module ActiveRecord
|
||||
)
|
||||
|
||||
rake_tasks do
|
||||
require "active_record/base"
|
||||
load "active_record/railties/databases.rake"
|
||||
end
|
||||
|
||||
@@ -38,9 +39,14 @@ module ActiveRecord
|
||||
# first time. Also, make it output to STDERR.
|
||||
console do |app|
|
||||
require "active_record/railties/console_sandbox" if app.sandbox?
|
||||
require "active_record/base"
|
||||
ActiveRecord::Base.logger = Logger.new(STDERR)
|
||||
end
|
||||
|
||||
runner do |app|
|
||||
require "active_record/base"
|
||||
end
|
||||
|
||||
initializer "active_record.initialize_timezone" do
|
||||
ActiveSupport.on_load(:active_record) do
|
||||
self.time_zone_aware_attributes = true
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
## unreleased ##
|
||||
|
||||
* Add support for runner hook. [Backport: #7695] *Ben Holley*
|
||||
|
||||
* Fixes bug with scaffold generator with `--assets=false --resource-route=false`.
|
||||
Fixes #9525.
|
||||
|
||||
|
||||
@@ -154,6 +154,14 @@ module Rails
|
||||
self
|
||||
end
|
||||
|
||||
# Load the application runner and invoke the registered hooks.
|
||||
# Check <tt>Rails::Railtie.runner</tt> for more info.
|
||||
def load_runner(app=self)
|
||||
initialize_runner
|
||||
super
|
||||
self
|
||||
end
|
||||
|
||||
# Rails.application.env_config stores some of the Rails initial environment parameters.
|
||||
# Currently stores:
|
||||
#
|
||||
@@ -305,6 +313,9 @@ module Rails
|
||||
require "rails/console/helpers"
|
||||
end
|
||||
|
||||
def initialize_runner #:nodoc:
|
||||
end
|
||||
|
||||
def build_original_fullpath(env)
|
||||
path_info = env["PATH_INFO"]
|
||||
query_string = env["QUERY_STRING"]
|
||||
|
||||
@@ -42,6 +42,7 @@ ENV["RAILS_ENV"] = options[:environment]
|
||||
|
||||
require APP_PATH
|
||||
Rails.application.require_environment!
|
||||
Rails.application.load_runner
|
||||
|
||||
if code_or_file.nil?
|
||||
$stderr.puts "Run '#{$0} -h' for help."
|
||||
|
||||
@@ -430,6 +430,11 @@ module Rails
|
||||
super
|
||||
end
|
||||
|
||||
def load_runner(app=self)
|
||||
railties.all { |r| r.load_runner(app) }
|
||||
super
|
||||
end
|
||||
|
||||
def eager_load!
|
||||
railties.all(&:eager_load!)
|
||||
|
||||
|
||||
@@ -145,6 +145,12 @@ module Rails
|
||||
@load_console
|
||||
end
|
||||
|
||||
def runner(&blk)
|
||||
@load_runner ||= []
|
||||
@load_runner << blk if blk
|
||||
@load_runner
|
||||
end
|
||||
|
||||
def generators(&blk)
|
||||
@generators ||= []
|
||||
@generators << blk if blk
|
||||
@@ -179,6 +185,10 @@ module Rails
|
||||
self.class.console.each { |block| block.call(app) }
|
||||
end
|
||||
|
||||
def load_runner(app=self)
|
||||
self.class.runner.each { |block| block.call(app) }
|
||||
end
|
||||
|
||||
def load_tasks(app=self)
|
||||
extend Rake::DSL if defined? Rake::DSL
|
||||
self.class.rake_tasks.each { |block| self.instance_exec(app, &block) }
|
||||
|
||||
@@ -174,5 +174,27 @@ module ApplicationTests
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def test_load_activerecord_base_when_we_use_observers
|
||||
Dir.chdir(app_path) do
|
||||
`bundle exec rails g model user;
|
||||
bundle exec rake db:migrate;
|
||||
bundle exec rails g observer user;`
|
||||
|
||||
add_to_config "config.active_record.observers = :user_observer"
|
||||
|
||||
assert_equal "0", `bundle exec rails r "puts User.count"`.strip
|
||||
|
||||
app_file "lib/tasks/count_user.rake", <<-RUBY
|
||||
namespace :user do
|
||||
task :count => :environment do
|
||||
puts User.count
|
||||
end
|
||||
end
|
||||
RUBY
|
||||
|
||||
assert_equal "0", `bundle exec rake user:count`.strip
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -57,5 +57,15 @@ module ApplicationTests
|
||||
|
||||
assert_match "script/program_name.rb", Dir.chdir(app_path) { `bundle exec rails runner "script/program_name.rb"` }
|
||||
end
|
||||
|
||||
def test_with_hook
|
||||
add_to_config <<-RUBY
|
||||
runner do |app|
|
||||
app.config.ran = true
|
||||
end
|
||||
RUBY
|
||||
|
||||
assert_match "true", Dir.chdir(app_path) { `bundle exec rails runner "puts Rails.application.config.ran"` }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -163,6 +163,22 @@ module RailtiesTest
|
||||
assert $ran_block
|
||||
end
|
||||
|
||||
test "runner block is executed when MyApp.load_runner is called" do
|
||||
$ran_block = false
|
||||
|
||||
class MyTie < Rails::Railtie
|
||||
runner do
|
||||
$ran_block = true
|
||||
end
|
||||
end
|
||||
|
||||
require "#{app_path}/config/environment"
|
||||
|
||||
assert !$ran_block
|
||||
AppTemplate::Application.load_runner
|
||||
assert $ran_block
|
||||
end
|
||||
|
||||
test "railtie can add initializers" do
|
||||
$ran_block = false
|
||||
|
||||
|
||||
Reference in New Issue
Block a user