Hi Christoph,

My (simple) example was just trying to give you an idea of how to do what 
you were asking using rescue_from.

And note that the log does show that the re-raising worked as expected, 
where we did something with the caught exception first (ie write a debug 
TEST line to the log) before then re-raising it and letting the rails env 
stack handle it (ie log shows the stacktrace including the orig line where 
the bug is in the code, ...).

As for "a better way", it always depends on what you're ultimately trying 
to accomplish and the tradeoffs for getting there.

But if you really did want to use rescue_from for any/all exceptions/errors 
that could occur, then at a minimum you're going to want to make sure that 
what you do with that caught exception (ie your Log4r::MDC... call) doesn't 
itself result in any exceptions/errors.  One way would be to wrap that work 
in a begin ... rescue Exception => e2 ... end ... before then re-raising 
the originally caught exception.

Jeff


On Tuesday, November 12, 2013 11:26:47 AM UTC-8, sol wrote:
>
> Hi Jeff, thanks for your reply!
>
> I found the article here:
>
> http://www.simonecarletti.com/blog/2009/11/re-raise-a-ruby-exception-in-a-rails-rescue_from-statement/
>
> And he mentions that re-raising does not work since rails won't catch it 
> anymore..
> has this been changed since?
>
> I generally thought there might be a better way, as usually re-raising 
> exceptions is considered to be bad :)
>
> Thanks a lot,
> Christoph
>
> On Tuesday, 12 November 2013 19:07:00 UTC+1, Jeff Lewis wrote:
>>
>> Hi Christoph,
>>
>> All you need to do is re-raise the exception after you're done using it 
>> in your rescue_from, so something along the lines of:
>>
>> $ cat ./app/controllers/foo_controller.rb
>> ...
>>   rescue_from Exception do |e|
>>     # do something with e before re-raising it ...
>>     Rails.logger.debug("TEST: before re-raising ... e=#{e.inspect}")
>>     raise e
>>   end
>> ...
>>
>>   def testfoo
>>     x = 'bar' if 1/0
>>     ....
>>   end
>> ....
>>
>> $ curl -sLi http://foo.localhost/testfoo
>> ...
>>
>> $ cat ./log/development.log
>> ...
>> [c55f5] TEST: before re-raising ... e=#<ZeroDivisionError: divided by 0>
>> [c55f5] Completed 500 Internal Server Error in 17ms
>> [c55f5]
>> ZeroDivisionError (divided by 0):
>>   app/controllers/foo_controller.rb:89:in `/'
>>   app/controllers/foo_controller.rb:89:in `testfoo'
>> ...
>>
>> Jeff
>>
>> On Tuesday, November 12, 2013 6:40:12 AM UTC-8, sol wrote:
>>>
>>> Hi there,
>>>
>>> I'm using Log4r in my rails projects. On log.error an email is sent 
>>> using the EmailOutputter.
>>> I know changed the EmailOutputter to include a global var in the subject 
>>> (MDC) since the subject is normally static.
>>>
>>> I want to set this var to the exception message, so it is sent as the 
>>> subject.
>>>
>>> Can anyone tell me how to do this in rails?
>>>
>>> Basically:
>>>
>>> raise e or some other cause
>>>> -> Log4r::MDC.put('subject', e.message)
>>>> continue with the exception
>>>
>>>
>>> I found *rescue_from* but it just gives it to the handler and then 
>>> stops.
>>>
>>> Thanks a lot,
>>> Christoph
>>>
>>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to rubyonrails-talk+unsubscr...@googlegroups.com.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/rubyonrails-talk/1f8eae3c-4927-4398-8e2e-d432bc1eaca7%40googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to