0

一連のWebサイトをスクレイプするための単純なrubygemを作成し、単純なAPIを提供し、gem自体の中に再試行メソッドを含めました...主にタイムアウトが原因で失敗したときにHpricotを3回以上使用しようとしました。

def retryable(options = {}, &block)
  opts = { :tries => 1, :on => Exception }.merge(options)

  retry_exception, retries = opts[:on], opts[:tries]

  begin
    return yield
  rescue retry_exception
    retry if (retries -= 1) > 0
  end

  yield
end

だから今、私が作成したこのgemを使用する私のRailsアプリでは、何らかの理由でGem自体が結果を生成できない場合に、エラーをどのように処理する必要があるのか​​疑問に思っています...

models / Available.rb

data = Whatever.find_item_by_id options
unless hwdata
  raise "Web error "
end

これを処理する方法がよくわかりません...この時点では、再試行はあまり気にしません。gemが返すハッシュまたはエラーでfalseを返す結果のいずれかを返すだけです。

4

1 に答える 1

0

404、500 などの通常のエラーの場合、Web サイトのコンテンツを取得するために使用しているメカニズムが何であれ、エラーがスローされます。他の理由で、Gem は他のエラーを発生させ、それらを処理できる場所を Rails アプリに通知します。そのアプリに固有だからです。

Gem は、再利用などのために、できるだけ一般的であるべきです。

于 2009-09-11T13:06:18.307 に答える