diff --git a/src/avram/connection.cr b/src/avram/connection.cr index 37c40b57b..3ea7bde91 100644 --- a/src/avram/connection.cr +++ b/src/avram/connection.cr @@ -21,13 +21,13 @@ class Avram::Connection def connect_listen(*channels : String, &block : PQ::Notification ->) : Nil PG.connect_listen(credentials.url, *channels, &block) - rescue DB::ConnectionRefused - raise ConnectionError.new(credentials.uri, database_class: @database_class) + rescue e : DB::ConnectionRefused + raise ConnectionError.new(credentials.uri, database_class: @database_class, cause: e) end def try_connection! : DB::Database DB.open(credentials.url) - rescue DB::ConnectionRefused - raise ConnectionError.new(credentials.uri, database_class: @database_class) + rescue e : DB::ConnectionRefused + raise ConnectionError.new(credentials.uri, database_class: @database_class, cause: e) end end diff --git a/src/avram/errors.cr b/src/avram/errors.cr index 6044a2947..a50081f42 100644 --- a/src/avram/errors.cr +++ b/src/avram/errors.cr @@ -88,7 +88,7 @@ module Avram getter connection_details : URI getter database_class : Avram::Database.class - def initialize(@connection_details : URI, @database_class : Avram::Database.class) + def initialize(@connection_details : URI, @database_class : Avram::Database.class, cause = nil) error = String.build do |message| message << database_class.name << ": Failed to connect to database '" message << connection_details.path.try(&.[1..-1]) << "' with username '" @@ -108,7 +108,7 @@ module Avram end end - super error + super error, cause end end @@ -139,8 +139,8 @@ module Avram end class PGNotRunningError < AvramError - def initialize(original_message : String) - super <<-ERROR + def initialize(original_message : String, cause = nil) + super <<-ERROR, cause It looks like Postgres is not running. Message from Postgres: diff --git a/src/avram/migrator/runner.cr b/src/avram/migrator/runner.cr index 02d3da421..6fc929a13 100644 --- a/src/avram/migrator/runner.cr +++ b/src/avram/migrator/runner.cr @@ -87,7 +87,7 @@ class Avram::Migrator::Runner rescue e : DB::ConnectionRefused message = e.message.to_s if message.blank? - raise ConnectionError.new(URI.parse(credentials.url_without_query_params), Avram.settings.database_to_migrate) + raise ConnectionError.new(URI.parse(credentials.url_without_query_params), Avram.settings.database_to_migrate, cause: e) else raise e end @@ -98,7 +98,7 @@ class Avram::Migrator::Runner puts "Already created #{self.db_name.colorize(:green)}" end elsif message.includes?("Cannot establish connection") - raise PGNotRunningError.new(message) + raise PGNotRunningError.new(message, cause: e) else raise e end @@ -264,6 +264,7 @@ class Avram::Migrator::Runner yield end rescue e : DB::ConnectionRefused - raise "Unable to connect to the database. Please check your configuration.".colorize(:red).to_s + message = "Unable to connect to the database. Please check your configuration.".colorize(:red).to_s + raise Exception.new(message, cause: e) end end diff --git a/src/avram/queryable.cr b/src/avram/queryable.cr index cf4b016c2..590f77c0a 100644 --- a/src/avram/queryable.cr +++ b/src/avram/queryable.cr @@ -168,7 +168,7 @@ module Avram::Queryable(T) direction = Avram::OrderBy::Direction.parse(direction.to_s) order_by(Avram::OrderBy.new(column, direction, null_sorting)) rescue e : ArgumentError - raise "#{e.message}. Accepted values are: :asc, :desc" + raise ArgumentError.new("#{e.message}. Accepted values are: :asc, :desc") end def order_by(order : Avram::OrderByClause) : self diff --git a/src/avram/tasks/db/verify_connection.cr b/src/avram/tasks/db/verify_connection.cr index 547843c18..476525160 100644 --- a/src/avram/tasks/db/verify_connection.cr +++ b/src/avram/tasks/db/verify_connection.cr @@ -23,8 +23,8 @@ class Db::VerifyConnection < BaseTask DB.open(Avram.settings.database_to_migrate.settings.credentials.url) do |_db| output.puts "✔ Connection verified" unless quiet? end - rescue Avram::ConnectionError | DB::ConnectionRefused - raise <<-ERROR + rescue e : Avram::ConnectionError | DB::ConnectionRefused + raise Exception.new <<-ERROR, cause: e Unable to connect to Postgres for database '#{Avram.settings.database_to_migrate}'. This is what we tried to connect to: