問題タブ [sucker-punch]
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 - Rails と sucker_punch: ジョブを実行する x 秒前にデバウンスして実行速度を制御する
私の Rails 3.2 プロジェクトでは、SuckerPunchを使用して、モデルの作成/更新時に高価なバックグラウンド タスクを実行しています。
ユーザーは、このモデルでさまざまなタイプの対話を行うことができます。ほとんどの場合、これらの更新は十分な間隔で行われますが、並べ替えや一括更新などの他のアクションでは、これらの POST 要求が非常に頻繁に受信される可能性があり、そのときにサーバーが圧倒されます。
私の質問は、最初の更新が発生したときにバックグラウンド ジョブを開始するための最もエレガントでスマートな戦略は何かということですが、たとえば10 秒待って、そのモデル (行ではなくテーブル) に更新が来ていないことを確認してから、ジョブを実行します。したがって、キューに入れずに効果的にスロットリングします。
私のsucker_punch
ワーカーは次のようになります。
Marker
「マップ」モデルから呼び出され、update_all
場合によっては次のようにコントローラーから呼び出されます。
したがって、バックグラウンド ジョブを実行するためのかなり標準的なセットアップです。x seconds
モデル (またはテーブル)の更新がなくなるまで、ジョブを待機させるかスケジュールしないようにするにはどうすればよいですか?
それが役立つ場合、Map has_many
Markersはロジックを使用してジョブをトリガーするため、マップ更新のマーカーの関連付けも問題ありません。
ruby-on-rails - Rails Sucker Punch - ホームページにアクセスせずにジョブを開始するには?
インデックス ページを読み込まずに、SuckerPunch のバックグラウンド ジョブを開始する方法を見つけようとしています。
今、私がしていることは次のとおりです。
$ rails server #localhost:3000 でサーバーを起動します
次に、ブラウザの URL に移動し、localhost:3000 と入力します。
これにより、SuckerPunch ジョブがトリガーされ、実行が開始されます。
私のapplication_controller.rb
そこでジョブを呼び出します。私が望むものを達成できるように、それらを置くことができる別の場所があるのではないかと考えています.
httpリクエストではなく、サーバーの起動時にジョブを開始します。
ruby-on-rails - ActiveJob キュー アダプタは無視されますか?
user_controller.rb
my_job.rb
config/initializer/sucker_punch.rb
Rails コンソールで実行するMyJob.perform_later
と、すべて正常に動作し、ロガーにこのメッセージが表示されますEnqueued MyJob (Job ID: 6c857af8-a8ed-4bd0-918b-4296c4315727) to SuckerPunch(default)
ただし、 http リクエストをuser_controllerに送信すると、 3 秒以内に応答が返されず (ジョブが非同期で実行されていないと思われます)、ロガーはこれを表示しますEnqueued MyJob (Job ID: e3d698eb-00d8-4849-9496-f01c53fc7217) to Inline(default)
非同期ではないコントローラーでインライン(デフォルト?)アダプターを使用しているようです。
ps : puma
http サーバーとして使用しており、ActiveJob なしで sucker_punch を使用しても問題なく動作します