問題タブ [rails-activejob]
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 - ActiveJob と Sidekiq を使用して慎重にデータをスクレイピングする
ActiveJob と 1 つの Sidekiq キューを使用して、約 20 ~ 30 の異なる Web サイトからデータを非同期的にスクレイピングしていますdefault
。
現在、追加されたジョブはすぐに開始され、私がスクレイピングしているホストを叩き出しています。これらの Web サイトにもっと敬意を持ってアクセスしたいのですが、ActiveJob/Sidekiq の設定方法がよくわかりません。
私のアイデアのシナリオは、次のことを実現します。
- 共通ソースを対象とするジョブは、連続するジョブの間に少なくとも 30 秒待機する必要があります
- 差分ソースを対象とするジョブは並行して実行できます
- 同一のジョブをキューに入れようとする試みは無視する必要があります。つまり、ジョブをキューに入れようとするときは、ジョブが既に存在するかどうかを確認し、追加しないでください。
- 再試行ジョブは同じ基準に従う必要があります
ありがとうございました!
ruby-on-rails - ActiveJob が外部 API から大量のデータを取得しているときに保留画面を表示する方法
restforceを使用して salesforce に API リクエストを行うアプリケーションがあります。
具体的には、アプリケーションは連絡先オブジェクトを見つけ、すべての関連オブジェクトの ID を返し、ID に基づいてすべての関連オブジェクトの完全なレコードを取得します。
これには、次の 2 つの理由で長い時間がかかります。
- 外部 API には多くのリクエストがあり、通常、それぞれが応答するのに数分の一の時間がかかり、場合によっては +500 の個別のリクエストが発生する可能性があります。
- 多くの場合、各リクエストによって大量のデータが引き戻されます。
現在、すべてのリクエストは Salesforce REST API の制限内にありますが、これらのリクエストの一部が処理されるまでに 5 分以上かかることがあるため、開発サーバーからタイムアウト エラーが発生しています。
Rails 4.2 - これを処理するにはどうすればよいですか?
私の質問は、レールにこれを処理させるにはどうすればよいですか?
API リクエストは、コントローラー (スキニー コントローラーに違反していることは間違いありません) から、またはビュー (危険なハックのように見えるヘルパー メソッド経由) から起動できます。
理想的には、バックグラウンド ジョブで実行したいのですが、ヘルパー メソッドを含めることができるのと同じ方法で、すべての認証とその他のメソッドをジョブに含めることができるかどうかわかりません。
バックグラウンド ジョブで動作させることができたとしても、ユーザー エクスペリエンスのベスト プラクティスが何であるかはわかりません。理想的には、プログレスバーを使用して「ハングアップ、コーヒーを飲みに行く」ように指示するページにルーティングし、リクエストが完了したら最終ページに自動ルーティングしたいと思います...
しかし、ジョブが完了するまで一時的な表示を生成する方法がわかりません。
この問題を消化するのに役立つ可能性のある宝石や戦略を誰かに勧めてもらえますか?
ruby-on-rails - active_job とレスキュー スケジューラのセットアップ方法
メール通知とスクレーパーのバックグラウンド ジョブを作成しようとしています。resque-scheduler (4.0.0)、resque (1.25.2)、rails 4.2.1 を使用しています。
私の config.ru ファイル:
私の /lib/tasks/resque.rake:
私の /config/resque_scheduler.yml:
私の /config/initializer/active_job.rb
私の /config/initializer/resque.rb:
メール通知の最初の仕事:
スケジュールされた実行のための私の 2 番目の仕事:
だから私は仕事をしなければなりません: 1. 電子メール通知 - DB に新しいレコードが表示されたときに電子メールを送信する必要があります 2. ページをスクレイピング - 1 時間ごとに実行する必要があります
実行方法:
これらのコマンドを実行した後、Resque ダッシュボードに、予想どおり 2 つのワーカーと 2 つのキューが表示されます。
しかし!
resque Schedule タブで 'queue now' ボタンをクリックすると、タスクが作成され、"fs_updates" キューに書き込まれたことがわかります。しかし、それは実行されておらず、数秒で消えます。
Rails コンソールから送信する電子メールのジョブを実行すると、まったく機能しません。
構成を修正するのを手伝ってください。よろしくお願いします!
amazon-s3 - カスタム DelayedJob 内で (エビ) PDF を作成し、S3 にアップロードしますか?
使用: Rails 4.2、Prawn、Paperclip、ActiveJobs 経由の DelayedJobs、Heroku。
非常にサイズが大きく、バックグラウンドで処理する必要がある PDF があります。カスタムジョブ内で作成し、S3 にアップロードして、準備ができたら URL をユーザーにメールで送信します。PdfUpload モデルを介してこれを容易にします。
私のアプローチ/コードに問題はありますか? 私が見つけた例で概説されているように File.open() を使用していますが、これが私のエラーの原因のようです( TypeError: FlightWithGradesReport から String への暗黙的な変換はありません)。
/pages_controller.rb
/ 仕事
これにより、エラーが発生します。
ruby-on-rails - ActiveJob コールバック メソッドで Job 属性を取得するには?
Rails 4.2、active_jobs、callback_methods
カスタム ジョブの perform メソッドで、新しいレコードを作成しました (そしてファイルを S3 にアップロードしました)。after_perform コールバックで新しいレコード ID を渡す、または取得するにはどうすればよいですか? S3 ドキュメントへのリンクを含むメール after_perform を送信したいのですが、after_perform メソッド内で ID を取得する方法がわかりません。ドキュメントによると、job.attributes を使用できますが、「未定義のメソッド属性」が表示されます。
メーラーの呼び出しを実行メソッドに移動することもできますが、コールバックを使用して正しく処理する必要があります。perform メソッドの外部で属性 (またはそれらの属性の発生場所) にアクセスする方法がわかりません。
これをコールバックに配置することにより、(コールバックで使用できる属性を特定するために) いくつかの検出作業を実行しようとしました。
また
また
これらはどれも機能せず、すべてが未定義の「属性」になりました。
ruby-on-rails - SerializationError Rails ActiveJobの時刻と日付
またはオブジェクトActiveJob::SerializationError
をシリアル化しようとしたときに発生するを回避するクリーンな方法を知っている人はいますか?Date
Time
私がこれまでに持っていた2つの解決策は次のとおりです。
dump
引数をロードするときにMarshal/JSON/YAML を呼び出しload
てから、Job に戻します (これは、メーラー ジョブにモンキー パッチを適用する必要があるためです)。- モンキーパッチ
Date
などTime
:
/lib/core_ext/time.rb
/lib/core_ext/date.rb
これもひどい。誰もがより良い解決策を持っていますか?
ruby-on-rails - プログラムによる ActiveJob キューの処理
を使用DelayedJob
すると、ワーカーをインスタンス化して、プログラムでジョブを完了することができます。
ActiveJob は同じことを行うためのインターフェイスを提供していますか?