以下をお勧めします。 インストール: Clang、GCC、Postgres、Redis
概要
Ruby の Concurrent::Future は例外をキャッチしていませんでした。そこで記事からコードをコピーしてレスキューブロックを追加しました。 しかし、今度はエラーが発生しました:
コードは次のとおりです。
executed_future = Concurrent::Future.execute do
url = "#{endpoint}#{datum[:hierarchy_id]}#{valuation_date}"
raise StandardError.new("Testing error!") # To test
[...]
end.rescue do | exception | # Adding this, will throw the error
@exceptions << exception
binding.pry # No activated
end
私には何が欠けているのでしょうか?
Concurrent::Future ブロックで例外をレスキューすることを期待しています。まさに記事の通りです。
解決策
私は Concurrent::Future に詳しくないので、その特定の gem にレスキュー メソッドの別の実装が存在することを見逃してしまうかもしれません。
しかし、Rubyでは、レスキューは、別のメソッドの戻り値で呼び出すメソッドではありません(質問のConcurrent::Future.execute呼び出しの戻り値など)。現在のブロックのコンテキストで発生した例外をキャッチするキーワードです。
したがって、Concurrent::Future.execute ブロック内で Ruby の慣用的な begin …rescue … end 構文を使用してみます。
executed_future = Concurrent::Future.execute do
begin
url = "#{endpoint}#{datum[:hierarchy_id]}#{valuation_date}"
raise StandardError.new("Testing error!") # To test
# ...
rescue StandardError => exception
@exceptions << exception
binding.pry
end
end