0

我有一个 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

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

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

非常感谢。

4

1 回答 1

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

救援在哪里为您进行类型检查。

干杯。

于 2013-01-19T06:25:36.183 回答