問題タブ [rescue]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ruby-on-rails - Ruby で ActiveRecord::RecordNotUnique 例外をキャッチして無視する方法
ソーステーブルに制約がないため、ソーステーブルに重複するキーレコードが見つかるまで、あるテーブルから別のテーブルにデータをロードするためにルビースクリプトジョブを毎日実行していました。私のターゲットテーブルは、ターゲットテーブルが列(head_date、center_id、site_url)に主キー制約を持っていたため、これらのレコードを拒否しました。プログラムが停止し、コマンド ラインに以下のエラーが表示されました。:-(
ソーステーブルには、このような厄介なレコードが他にもあると予想できます。このアクティブなレコードの例外をキャッチした後、処理を続行して次のレコードに進むにはどうすればよいですか?
以下は私の更新/挿入のコードです:
ruby - Ruby Oneline Rescue
rescue
最近、ある行で問題が発生した場合に備えて、その行で使用できることを学びました( http://www.rubyinside.com/21-ruby-tricks-902.htmlヒント#21を参照)。以前は次のようなコードがありました。
このrescue
メソッドを使用すると、そのコードを次のようなものに変更できると思います。
ハッシュへのアクセスのいずれかのレベルでnil例外がスローされた場合、それはレスキューによってキャッチされ、私に''を与える必要があります。これは私が望むものです。nil
それが望ましい動作である場合は、名前をに設定することもできます。
これを行うことで既知の危険はありますか?これはあまりにも良さそうなので、私は尋ねます。私は非常に醜いコードを持っているので、最初のコード例のようにそれを取り除きたいと思います。
ruby-on-rails - Rails 4 で ActionDispatch::ParamsParser::ParseError からレスキューする方法
Rails 4 は例外ActionDispatch::ParamsParser::ParseError例外を追加しますが、ミドルウェア スタックにあるため、通常のコントローラー環境ではレスキューできないようです。json API アプリケーションでは、標準のエラー形式で応答する必要があります。
この要点は、ミドルウェアを挿入して傍受して応答するための戦略を示しています。このパターンに従って、私は持っています:
アプリケーション.rb:
そしてミドルウェアは次のとおりです。
ミドルウェアなしでテストを実行すると、(仕様):
これはまさに私が期待するものです(私がrescue_fromできないParseError)。
上記のミドルウェアに追加する変更は次のとおりです。
また、ログは、標準コントローラー アクションが実行され、通常の応答を返していることを示しています (ただし、パラメーターを受信しなかったため、何も更新されませんでした)。
私の質問:
どのように ParseError からレスキューし、カスタム レスポンスを返すことができますか。私は正しい軌道に乗っているように感じますが、完全ではありません。
例外が発生してレスキューされたときに、コントローラーのアクションがまだ進行している理由がわかりません。
--Kip さん、どうもありがとうございました。
ruby-on-rails - Ruby Twitter gem でエラーをキャッチし、delayed_job を使用してメソッドをキャッシュする: 何が間違っているのでしょうか?
私がしていること
Herokuで実行されるアプリでtwitter gem (Twitter API の Ruby ラッパー) を使用しています。Heroku のスケジューラを使用して、Twitter gem を使用するキャッシュ タスクを定期的に実行し、たとえば、特定のユーザーのリツイートのリストを更新します。また、 delayed_jobを使用しているため、スケジューラは「遅延」されたメソッドを呼び出す rake タスクを呼び出します (以下の scheduler.rake を参照)。このメソッドは、「認証」(私のアプリで Twitter を認証したユーザーの場合) をループして、アプリ内の承認された各ユーザーのリツイート キャッシュを更新します。
私の質問
私は何を間違っていますか?例えば、Heroku の Scheduler を使っているので、delayed_job は冗長ですか? また、エラーをキャッチ (レスキュー) していないこともわかります。そのため、Twitter に到達できない場合、またはユーザーの認証トークンの有効期限が切れている場合、すべてが停止します。エラーが発生すると、全体が停止し、失敗したdelayed_jobが作成され、アプリに波及効果が発生するため、これは明らかにばかげてひどいものです。これが悪いことはわかりますが、最善の解決策が何であるかはわかりません。どのように/どこでエラーをキャッチする必要がありますか?
キャッシュ メソッドの 1 つにすべてのコード (スケジューラから呼び出されるメソッドまで) を配置します。私は本当に、箇条書きリスト (およびおそらくいくつかのコードまたは疑似コード) がコーディングの練習不足を非難し、どこを改善できるかを教えてくれることを望んでいます.
この SO questionを見たことがありますが、これは begin/rescue ブロックで少し役立ちますが、エラーをキャッチするためのより多くのガイダンスを使用できます。飛行機。
コード
Heroku スケジューラ ジョブ:
scheduler.rake (私のアプリ内)
Tweet.rb、update_retweet_cache メソッド:
User.rb、twitter メソッド:
注:これを投稿しているときに、「cache_retweets_for_all_auths」メソッドですべての「twitter」認証を見つけてから、特に「twitter」認証に制限する「User.twitter」メソッドを呼び出していることに気付きました。これは明らかに冗長なので、修正します。
ruby - begin レスキュー終了ブロック内でアサートできますか?
失敗した場合に機能することがわかるテストを行っています。以下の例よりも、テストユニットを使用してルビーでこれをコーディングするより良い方法はありますか?
これは非常に不格好に思えますが、これを書くためのより良い方法はありますか? Method.shouldFail は常に失敗すると思いますが、そうではないかもしれません。そして、最後のレスキュー ブロックでは、e.code は常に 400 である必要がありますが、それ以外の可能性もあります。
ruby - Watir でタイムアウト エラーが発生した後、サイトのテストを再試行します。
私はサイトのリストを調べ、Watir を使用して各サイトに移動し、各ページのソース コードで何かを探しています。ただし、約 20 または 30 のサイトの後、特定のページをロードするときにブラウザーがタイムアウトし、スクリプトが壊れて、次のエラーが発生します。
rbuf_fill: 実行期限切れ (Timeout::Error)
タイムアウトを検出し、中断したところからサイトのテストを再開する方法を実装しようとしていますが、問題があります。これは私のコードです:
ruby - 例外は、行末の「レスキュー」でのみキャッチされますが、「レスキュー開始」ブロックを使用する場合はキャッチされません
失敗するステートメントがあります:
以下はエラーを抑制し、確認できますnil
しかし、次のことを行うと、最初のエラーが UI までスローされdetails
、例外が発生しません。
私が見逃しているばかげた詳細があると確信していますが、ここで問題を見つけることができないようです. では、なぜrescue
ブロックが呼び出されないのでしょうか?
更新:私が得たエラーはこれでした:
ruby - 外部 gem の使用中に例外をキャッチする
外部の Ruby gem を利用するプログラムを作成しました。私はこれでさまざまなアクションを実行しているので、メソッドを呼び出すたびに例外を実装するのではなく、全面的に例外をレスキューして処理できるようにしたいと考えています。
これを行う最善の方法は何ですか?
単純に外部 gem を呼び出し、例外をレスキューする独自のメソッドを作成する必要がありますか? または、「このタイプの例外がプログラムのどこかで発生するたびに、この方法で処理する」のような別の方法はありますか?
外部の gem コードを記述した場合、そのようなエラー処理を追加できることはわかっていますが、それは実現不可能です。
ruby-on-rails - モジュール内の特定のタイプのすべてのエラーをレスキューします
プロジェクトのすべての暗号化/復号化タスクを実行するモジュールがあります。OpenSSL::Cipher::CipherError
このモジュールで発生するすべての例外をキャッチして、処理できるようにしたいと考えています。
のようなことは可能ですか?
モジュールの中に?
ruby - ネストされたレスキュー ステートメントのリファクタリング
Rescue ステートメントは、さまざまなエラーを連続してフィルタリングする場合に役立ちます。
しかし、異なるパラメーターで同じエラーを解決する場合、これが私のコードで使用するものです。
言うまでもなく、私はそれが好きではありません。これを行うためのより賢い方法はありませんか?