Ruby rescue doesn't catch a StandardError
我正在为Ruby Rails应用程序编写测试,并且我有一块代码块,如果Ruby无法连接到它,它应该捕获我的Redis服务器抛出的错误。 目前,代码如下所示:
1 2 3 4 5 6 | begin config.before(:all) { Resque.redis.select 1 } config.after(:all) { Resque.redis.keys("queue:*").each { |key| Resque.redis.del key } } rescue Exception puts"RESCUED REDIS ERROR" end |
根据我尝试运行测试时的堆栈跟踪,该代码片段的第二行 - config.before(:all){...} - 抛出Redis :: CannotConnectError。 在经过很多"e.class.superclass.superclass ..."命令之后,我确定这个错误继承自StandardError。
之后我卡住了。 我尝试用"rescue Redis :: CannotConnectError"捕获错误,然后"救援",最后"救援Exception",但仍然抛出错误。 但是,我在Ruby命令提示符中尝试了相同的操作,每次都会捕获异常
谁能帮我弄清楚这里发生了什么? 谢谢!
问题是传递给
您可能希望在块内移动开始/救援:
1 2 3 4 5 6 7 8 9 | config.before(:all) do begin Resque.redis.select 1 rescue Exception puts"RESCUED REDIS ERROR" end end # same for config.after(:all) |