aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb22
1 files changed, 19 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb
index 918c29114c..cd3b53d831 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/connection_specification.rb
@@ -206,10 +206,26 @@ module ActiveRecord
else
spec = spec.symbolize_keys
unless spec.key?(:adapter) then raise AdapterNotSpecified, "database configuration does not specify adapter" end
- adapter_method = "#{spec[:adapter]}_connection"
- require "active_record/connection_adapters/#{spec[:adapter]}_adapter"
- unless respond_to?(adapter_method)
+ tried_gem = false
+ begin
+ require "active_record/connection_adapters/#{spec[:adapter]}_adapter"
+ rescue LoadError
+ raise if tried_gem
+
+ begin
+ require 'rubygems'
+ gem "activerecord-#{spec[:adapter]}-adapter"
+ rescue LoadError
+ raise "Please install the #{spec[:adapter]} adapter: `gem install activerecord-#{spec[:adapter]}-adapter` (#{$!})"
+ end
+
+ tried_gem = true
+ retry
+ end
+
+ adapter_method = "#{spec[:adapter]}_connection"
+ if !respond_to?(adapter_method)
raise AdapterNotFound, "database configuration specifies nonexistent #{spec[:adapter]} adapter"
end