Rufus Scheduler - 捕获异常并执行条件语句

时间:2012-11-07 19:06:18

标签: ruby exception dropbox conditional-statements rufus-scheduler

我有一个rufus调度程序,它向Dropbox执行一个请求,检查访问密钥和密钥是否每10分钟授权一次。

如果未经授权,则报告以下异常:

DropboxAuthError in GalleryController#index

#<Net::HTTPUnauthorized:0x7ef04c8>

我在调度程序中检测到的代码来自rufus-scheduler文档:

def scheduler.on_exception(job, exception)
  puts "job #{job.job_id} caught exception '#{exception}'"
end

因为我只想捕获上面的异常,所以我希望能够执行一个条件语句,将异常与值进行比较,如:

 def scheduler.on_exception(job, exception)
  if exception == "DropboxAuthError"
    puts "job #{job.job_id} caught exception '#{exception}'"
  end
 end

但是因为异常是一个对象,我不能做那个比较。

有没有人知道我该怎么做?

非常感谢。

1 个答案:

答案 0 :(得分:0)

许多养猫的方法

if exception.message.match(/DropboxAuthError/)
  # ...
end

if exception.is_a?(Net::HTTPUnauthorized)
  # ...
end

不要害怕你的Ruby对象。

请注意,您可以避免从rufus-scheduler文档中选择的全局错误处理,并执行以下操作:

scheduler.every '10m' do
  begin
    # do the API call...
  rescue Net::HTTPUnauthorized => ne
    puts "not authorized"
  rescue => e
    puts "something wrong happened " + e.inspect
  end  
end

救援为你做类型检查。

干杯。