aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYves Senn <yves.senn@garaio.com>2012-10-29 09:02:48 +0100
committerYves Senn <yves.senn@gmail.com>2013-02-20 10:54:58 +0100
commit0a6b61a5f534c07406f1ec2de11b4a53ce81151d (patch)
tree2a99eab6af1b734ac8e092225c3ec072943e854d
parentc3f1b1d3cdb837a24d66b80deda39cfe23856724 (diff)
downloadrails-0a6b61a5f534c07406f1ec2de11b4a53ce81151d.tar.gz
rails-0a6b61a5f534c07406f1ec2de11b4a53ce81151d.tar.bz2
rails-0a6b61a5f534c07406f1ec2de11b4a53ce81151d.zip
descriptive error message when AR adapter was not found. Closes #7313.
-rw-r--r--activerecord/CHANGELOG.md7
-rw-r--r--activerecord/lib/active_record/connection_adapters/connection_specification.rb7
-rw-r--r--activerecord/test/cases/connection_specification/resolver_test.rb9
3 files changed, 20 insertions, 3 deletions
diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md
index 00b2c431ac..a888b79391 100644
--- a/activerecord/CHANGELOG.md
+++ b/activerecord/CHANGELOG.md
@@ -1,5 +1,10 @@
## Rails 4.0.0 (unreleased) ##
+* Descriptive error message when the necessary AR adapter gem was not found.
+ Fix #7313
+
+ *Yves Senn*
+
* ActiveRecord now raises an error when blank arguments are passed to query
methods for which blank arguments do not make sense. This also occurs for
nil-like objects in arguments.
@@ -8,7 +13,7 @@
Post.limit() # => raises error
Post.include([]) # => raises error
-
+
*John Wang*
* Simplified type casting code for timezone aware attributes to use the
diff --git a/activerecord/lib/active_record/connection_adapters/connection_specification.rb b/activerecord/lib/active_record/connection_adapters/connection_specification.rb
index 577a362568..873f1ad3d4 100644
--- a/activerecord/lib/active_record/connection_adapters/connection_specification.rb
+++ b/activerecord/lib/active_record/connection_adapters/connection_specification.rb
@@ -51,10 +51,13 @@ module ActiveRecord
raise(AdapterNotSpecified, "database configuration does not specify adapter") unless spec.key?(:adapter)
+ path_to_adapter = "active_record/connection_adapters/#{spec[:adapter]}_adapter"
begin
- require "active_record/connection_adapters/#{spec[:adapter]}_adapter"
+ require path_to_adapter
+ rescue Gem::LoadError => e
+ raise Gem::LoadError, "Specified '#{spec[:adapter]}' for database adapter, but the gem is not loaded. Add `gem '#{e.name}'` to your Gemfile."
rescue LoadError => e
- raise LoadError, "Please install the #{spec[:adapter]} adapter: `gem install activerecord-#{spec[:adapter]}-adapter` (#{e.message})", e.backtrace
+ raise LoadError, "Could not load '#{path_to_adapter}'. Make sure that the adapter in config/database.yml is valid. If you use an adapter other than 'mysql', 'mysql2', 'postgresql' or 'sqlite3' add the necessary adapter gem to the Gemfile.", e.backtrace
end
adapter_method = "#{spec[:adapter]}_connection"
diff --git a/activerecord/test/cases/connection_specification/resolver_test.rb b/activerecord/test/cases/connection_specification/resolver_test.rb
index f0a2cdca1a..fb21ab4f50 100644
--- a/activerecord/test/cases/connection_specification/resolver_test.rb
+++ b/activerecord/test/cases/connection_specification/resolver_test.rb
@@ -70,6 +70,15 @@ module ActiveRecord
spec = resolve "abstract://foo:#{encoded_password}@localhost/bar"
assert_equal password, spec[:password]
end
+
+ def test_descriptive_error_message_when_adapter_is_missing
+ error = assert_raise(LoadError) do
+ resolve(adapter: 'non-existing')
+ end
+
+ assert_match "Could not load 'active_record/connection_adapters/non-existing_adapter'", error.message
+ end
+
end
end
end