pytlik
June 2, 2007, 10:53am
1
Hello,
When changing the default yaml-defined-connection via the
establish_connection in,
say, a login controller (we are using user-level access to our
database), wrong
credentials are not immediately notified (no exception is raised).
Instead, this
happens only at the first database access after the
establish_connection call:
ActiveRecord::Base.establish_connection(…)
rescue
… # not getting here
ActiveRecord::Base.establish_connection(…)
SomeTable.fetchData
rescue
… # getting here, $! containing (Oracle) database error message,
saying pwd is wrong
Is this a bug, or a feature?
Thanks for any hints,
Martin
pytlik
June 2, 2007, 11:21am
2
Martin B. wrote:
Hello,
When changing the default yaml-defined-connection via the
establish_connection in,
say, a login controller (we are using user-level access to our
Thanks for any hints,
Martin
Establish connection have no exception saying that the pwd is wrong.
The exceptions AdapterNotSpecified, AdapterNotFound and ArgumentError
may be returned on an error.
But you can use the connected? boolean method to know if you connected
to the database or not
pytlik
June 2, 2007, 12:23pm
3
Jamal S. wrote:
But you can use the connected? boolean method to know if you connected
to the database or not
Thanks for your reply. Your “solution” works, but the connected?
method does not return false in my case, it raises an exception.
Conceptually, I would prefer the boolean value…
Regards,
Martin
pytlik
June 2, 2007, 12:40pm
4
Martin wrote:
Jamal S. wrote:
But you can use the connected? boolean method to know if you connected
to the database or not
Thanks for your reply. Your “solution” works, but the connected?
method does not return false in my case, it raises an exception.
Conceptually, I would prefer the boolean value…
Regards,
Martin
What exception does it raise?
active?
Is this connection active and ready to perform queries?
Try it, maybe this doesn’t raise any exception.
Jamal S. wrote:
What exception does it raise?
active?
Is this connection active and ready to perform queries?
Try it, maybe this doesn’t raise any exception.
Now we are going details… actually, I already used
ActiveRecord::Base.connection.active?
I found out that this raises an OCIException, if called
after an establish_connection with wrong credentials.
ActiveRecord::Base.connected? always returns false for me,
even if the credentials are correct…
Btw, is there an easy way to find out what Exception was
raised when giving an empty rescue line?
Regards,
Martin
Martin wrote:
Jamal S. wrote:
What exception does it raise?
dentials are correct…
Btw, is there an easy way to find out what Exception was
raised when giving an empty rescue line?
What do you mean empty rescue line?
Regards,
Martin
Jamal S. wrote:
What do you mean empty rescue line?
OK, I had a look at the documentation now, the correct
description is
“write a rescue clause with no parameter list”
This defaults to StandardError. I would then like to find
out which subtype of StandardError was caught.
regards,
martin
Martin wrote:
Jamal S. wrote:
What do you mean empty rescue line?
OK, I had a look at the documentation now, the correct
description is
“write a rescue clause with no parameter list”
This defaults to StandardError. I would then like to find
out which subtype of StandardError was caught.
regards,
martin
If you write rescue without any parameter list you would catch all the
exception as you already know now…
I think you can still know which exception occurred by using one method,
cannot remember…
pytlik
June 2, 2007, 11:10pm
9
On Jun 2, 2007, at 3:34 PM, Jamal S. wrote:
This defaults to StandardError. I would then like to find
method,
cannot remember…
begin
raise NameError, “something went wrong”
rescue => e
puts “Caught: #{e.class.name}”
end
rescue => e
is exactly equivalent to:
rescue StandardError => e
If you need to catch more than StandardError, you can use:
rescue Exception => e
Or catch some other branch of the Exception hierarchy
rescue ScriptError => e # subclass of Exception
rescue LoadError => e # subclass of ScriptError
Or even less than StandardError
rescue IOError => e # subclass of StandardError
rescue EOFError => e # subclass of IOError
And, of course, ‘e’ is just a local variable so use your favorite
name if ‘e’ doesn’t feel right (but it is a very common idiom).
-Rob
Rob B. http://agileconsultingllc.com
[email protected]