2016-10-06 13 views
0

私は、平均して4000-5000レコードを挿入しています。すべてのレコードが追加されるまで、挿入要求は平均して1ミリ秒以内に送信されます。インポート全体が1つのトランザクションでラップされます。ジョブは次のエラーで失敗します。Too Many Requests ActiveRecord

ActionView::Template::Error (Failed. Response code = 429. Response message = Too Many Requests.): 

エラーを私のmodel.createステートメントにトレースしました。 ActiveRecordを使用して複数のレコードを一度に挿入する方法がないことを知っています。そのため、短時間で要求できる量を増やすことは可能ですか?または、一度に複数のレコードを挿入するために宝石を使用する必要がありますか?すなわちactiverecord-import

私はActionView :: Template :: Errorをキャッチして再試行する前に数秒間バックアップしたのかどうか確信していますが、これを行う方法は他にありますか?

+0

あなたが実際に解決しようとしている課題についていくつか詳しく説明できますか? 1回のリクエストで4000レコードを挿入する必要があるのはなぜですか? – max

+0

このインポートはしばらくの間しか実行されません。基本的には、外部APIから大量のレコードを取得し、データベースに保存します。外部APIのデータはページに入っていますが、現在はすべてのページを取得して一括して保存しているため、アトミックです。 – user6689604

+0

このような作業を頻繁に行う場合は、一括挿入ツールを使用することをおすすめします。 – tadman

答えて

0

このエラーは私たち自身のサーバーとは関係ありませんでした。我々がインポートする部分の1つはShopifyからです。 HTTPトラフィックを監視した後、私はあなたが注文を取得し、その注文に関連するトランザクションを取得しようとしたことを認識しました。これは余分な要求です。そこで、私たちはあまりにも多くのリクエストを行い、APIの限界に達しようとしていました。

0

これを達成するためにバックグラウンドジョブを使用したことはありますか?使用しているデータベースによっては、新しいデータを同時に挿入することができます。

+0

わかりませんが、なぜバックグラウンドジョブがあまりにも多くのリクエストエラーを回避するのに役立つのでしょうか?あなたはバックグラウンドジョブでリクエストを抑制することを意味しますか? – user6689604

+0

エラーが見つかりました。 :]あなたが望むならば、バックグラウンドジョブを使って絞り込むことができました。 – charleschanlee

+0

私は間違いなくバックグラウンドジョブを見て、私はdelayed_jobの使用を検討していた、あなたは何か推奨事項がありますか? – user6689604

0

これは通常、あるメソッド自体がの再帰的なファッションで別のメソッドを呼び出すときに発生します。

だから私は再び今度は同じaction..soにredirect_toを送るredirect_to 1でアクションを持っている場合あまりにも多くのリクエストエラーになりたこの..

同じ partialsのレンダリングに適用されます

それ自身が部分レンダリングの親を持ち、親ビュー子サブ部分をレンダリングしており、の部分もレンダリングしています。 ..これは再帰的ループになります。

希望します。

+0

インポート中に何もレンダリングされていませんでしたが、それは私たち自身のサーバーとはまったく無関係でした。あなたの応答をありがとう! – user6689604