2010-02-04 12:29:18 -05:00
require " active_record "
require " rails "
require " active_model/railtie "
2009-12-23 17:55:12 -05:00
# For now, action_controller must always be present with
2016-07-12 02:51:36 -04:00
# Rails, so let's make sure that it gets required before
2009-12-23 17:55:12 -05:00
# here. This is needed for correctly setting up the middleware.
# In the future, this might become an optional require.
2009-12-31 16:11:54 -05:00
require " action_controller/railtie "
2009-12-23 17:55:12 -05:00
module ActiveRecord
2010-06-16 13:45:04 -04:00
# = Active Record Railtie
2012-09-22 00:38:18 -04:00
class Railtie < Rails :: Railtie # :nodoc:
2010-03-26 13:47:55 -04:00
config . active_record = ActiveSupport :: OrderedOptions . new
2009-12-27 07:32:40 -05:00
2016-08-06 13:37:57 -04:00
config . app_generators . orm :active_record , migration : true ,
timestamps : true
2010-01-28 13:45:25 -05:00
2011-12-01 13:16:19 -05:00
config . action_dispatch . rescue_responses . merge! (
2016-08-06 12:24:04 -04:00
" ActiveRecord::RecordNotFound " = > :not_found ,
" ActiveRecord::StaleObjectError " = > :conflict ,
" ActiveRecord::RecordInvalid " = > :unprocessable_entity ,
" ActiveRecord::RecordNotSaved " = > :unprocessable_entity
2011-12-01 13:16:19 -05:00
)
2012-08-01 10:16:04 -04:00
config . active_record . use_schema_cache_dump = true
2013-12-29 06:05:04 -05:00
config . active_record . maintain_test_schema = true
2012-08-01 10:16:04 -04:00
2012-08-01 14:54:22 -04:00
config . eager_load_namespaces << ActiveRecord
2009-12-28 20:37:18 -05:00
rake_tasks do
2013-06-20 21:46:49 -04:00
namespace :db do
task :load_config do
2014-01-01 17:33:59 -05:00
ActiveRecord :: Tasks :: DatabaseTasks . database_configuration = Rails . application . config . database_configuration
2013-12-23 14:15:52 -05:00
2016-01-20 18:11:58 -05:00
if defined? ( ENGINE_ROOT ) && engine = Rails :: Engine . find ( ENGINE_ROOT )
2016-08-06 12:24:04 -04:00
if engine . paths [ " db/migrate " ] . existent
ActiveRecord :: Tasks :: DatabaseTasks . migrations_paths += engine . paths [ " db/migrate " ] . to_a
2013-06-20 21:46:49 -04:00
end
end
2013-04-24 09:37:55 -04:00
end
end
2009-12-30 22:24:00 -05:00
load " active_record/railties/databases.rake "
2009-12-28 20:37:18 -05:00
end
2011-05-04 10:31:06 -04:00
# When loading console, force ActiveRecord::Base to be loaded
# to avoid cross references when loading a constant for the
# first time. Also, make it output to STDERR.
2011-05-24 19:37:55 -04:00
console do | app |
require " active_record/railties/console_sandbox " if app . sandbox?
2012-05-28 11:47:10 -04:00
require " active_record/base "
2016-01-05 17:23:43 -05:00
unless ActiveSupport :: Logger . logger_outputs_to? ( Rails . logger , STDERR , STDOUT )
console = ActiveSupport :: Logger . new ( STDERR )
Rails . logger . extend ActiveSupport :: Logger . broadcast console
end
2010-07-17 04:59:41 -04:00
end
2013-03-14 01:17:13 -04:00
runner do
2012-05-29 10:43:46 -04:00
require " active_record/base "
end
2010-01-22 14:44:29 -05:00
initializer " active_record.initialize_timezone " do
2010-03-29 20:08:08 -04:00
ActiveSupport . on_load ( :active_record ) do
2010-03-07 09:24:30 -05:00
self . time_zone_aware_attributes = true
self . default_timezone = :utc
end
2010-01-22 14:44:29 -05:00
end
2010-01-24 19:06:12 -05:00
initializer " active_record.logger " do
2010-03-29 20:08:08 -04:00
ActiveSupport . on_load ( :active_record ) { self . logger || = :: Rails . logger }
2010-01-24 19:06:12 -05:00
end
2013-03-14 01:17:13 -04:00
initializer " active_record.migration_error " do
2012-06-05 20:15:16 -04:00
if config . active_record . delete ( :migration_error ) == :page_load
2015-08-08 16:15:28 -04:00
config . app_middleware . insert_after :: ActionDispatch :: Callbacks ,
2015-08-14 08:58:56 -04:00
ActiveRecord :: Migration :: CheckPending
2012-06-05 20:15:16 -04:00
end
end
2012-09-08 03:11:42 -04:00
initializer " active_record.check_schema_cache_dump " do
2012-08-01 10:16:04 -04:00
if config . active_record . delete ( :use_schema_cache_dump )
config . after_initialize do | app |
ActiveSupport . on_load ( :active_record ) do
2016-11-13 22:18:14 -05:00
filename = File . join ( app . config . paths [ " db " ] . first , " schema_cache.yml " )
2012-09-22 00:38:18 -04:00
2012-08-01 10:16:04 -04:00
if File . file? ( filename )
2016-11-13 22:18:14 -05:00
cache = YAML . load ( File . read ( filename ) )
2012-08-01 10:16:04 -04:00
if cache . version == ActiveRecord :: Migrator . current_version
2017-01-05 03:20:57 -05:00
connection . schema_cache = cache
connection_pool . schema_cache = cache . dup
2012-08-01 10:16:04 -04:00
else
2016-11-13 22:18:14 -05:00
warn " Ignoring db/schema_cache.yml because it has expired. The current schema version is #{ ActiveRecord :: Migrator . current_version } , but the one in the cache is #{ cache . version } . "
2012-08-01 10:16:04 -04:00
end
end
end
end
end
end
2015-02-07 15:33:13 -05:00
initializer " active_record.warn_on_records_fetched_greater_than " do
if config . active_record . warn_on_records_fetched_greater_than
ActiveSupport . on_load ( :active_record ) do
2016-08-06 12:24:04 -04:00
require " active_record/relation/record_fetch_warning "
2015-02-07 15:33:13 -05:00
end
end
end
2009-12-23 17:55:12 -05:00
initializer " active_record.set_configs " do | app |
2010-03-29 20:08:08 -04:00
ActiveSupport . on_load ( :active_record ) do
2016-10-28 23:05:58 -04:00
app . config . active_record . each do | k , v |
2010-03-07 09:24:30 -05:00
send " #{ k } = " , v
end
2009-12-23 17:55:12 -05:00
end
end
# This sets the database configuration from Configuration#database_configuration
# and then establishes the connection.
2015-10-05 22:56:02 -04:00
initializer " active_record.initialize_database " do
2010-03-29 20:08:08 -04:00
ActiveSupport . on_load ( :active_record ) do
2014-04-01 17:45:15 -04:00
self . configurations = Rails . application . config . database_configuration
2013-11-11 15:56:09 -05:00
2014-04-01 17:45:15 -04:00
begin
establish_connection
rescue ActiveRecord :: NoDatabaseError
warn <<-end_warning
Oops - You have a database configured , but it doesn ' t exist yet!
2013-11-11 15:56:09 -05:00
2014-04-01 17:45:15 -04:00
Here ' s how to get started :
1 . Configure your database in config / database . yml .
2015-12-18 07:01:05 -05:00
2 . Run ` bin/rails db:create ` to create the database .
3 . Run ` bin/rails db:setup ` to load your database schema .
2014-04-01 17:45:15 -04:00
end_warning
raise
end
2010-03-07 09:24:30 -05:00
end
2009-12-23 17:55:12 -05:00
end
2009-12-30 22:24:00 -05:00
# Expose database runtime to controller for logging.
2013-03-14 01:17:13 -04:00
initializer " active_record.log_runtime " do
2009-12-30 22:24:00 -05:00
require " active_record/railties/controller_runtime "
2010-03-29 20:08:08 -04:00
ActiveSupport . on_load ( :action_controller ) do
2010-03-07 09:24:30 -05:00
include ActiveRecord :: Railties :: ControllerRuntime
end
2009-12-30 22:24:00 -05:00
end
2016-02-21 20:25:52 -05:00
initializer " active_record.set_reloader_hooks " do
2012-06-15 07:09:19 -04:00
ActiveSupport . on_load ( :active_record ) do
2016-02-21 20:25:52 -05:00
ActiveSupport :: Reloader . before_class_unload do
2012-11-12 20:24:10 -05:00
if ActiveRecord :: Base . connected?
ActiveRecord :: Base . clear_cache!
2015-06-11 12:37:53 -04:00
ActiveRecord :: Base . clear_reloadable_connections!
2012-11-12 20:24:10 -05:00
end
2010-03-07 09:24:30 -05:00
end
2010-01-14 13:53:07 -05:00
end
end
2016-02-21 20:25:52 -05:00
initializer " active_record.set_executor_hooks " do
ActiveSupport . on_load ( :active_record ) do
ActiveRecord :: QueryCache . install_executor_hooks
end
end
2011-12-12 16:51:33 -05:00
initializer " active_record.add_watchable_files " do | app |
2012-10-08 07:53:25 -04:00
path = app . paths [ " db " ] . first
config . watchable_files . concat [ " #{ path } /schema.rb " , " #{ path } /structure.sql " ]
2011-12-12 16:51:33 -05:00
end
2017-02-17 18:56:48 -05:00
initializer " active_record.clear_active_connections " do
config . after_initialize do
ActiveSupport . on_load ( :active_record ) do
clear_active_connections!
end
end
end
2009-12-23 17:55:12 -05:00
end
2009-12-30 22:24:00 -05:00
end