実際のキューサービスでジョブを実行するいくつかのスケジュールされたタスクがあります。1つのジョブに対してActiveJobアダプタを変更するレール
ダッシュボードからこれらのタスクを手動で実行し、その実行を待って、コントローラのアクションでその出力の一部を読み込み/処理できるようにします。典型的なケースは、管理者がいくつかの統計情報を手動で再ロードしたい場合で、数秒間サーバーを停止させても問題ありません。
これを行うには、ActiveJobアダプタを「インライン」に変更する方法はありますか?可能であれば、このジョブによって生成された成果物(インスタンス変数、またはperform
アクションの戻り値)を読むこともできます。
これを行う方法はありますか?私は「perform_nowは」あなたが探しているものであると考えてい
サンプルジョブ
class TopLevelJob < ApplicationJob
def perform
some_iterator.each do
SomeNestedJob.rand.perform_later
# There are several types of sub-jobs that can be called
# Passing a flag param (perform vs perform_later) would be kind of annoying
end
end
module SomeNestedJob
class A < ApplicationJob;
def perform
# May in turn spawn an other job with perform_later
end
end
...
class Z < ApplicationJob; ...; end
def self.rand
[A..Z].sample
end
end
問題は、自分のジョブがいくつかのネストされたジョブをトリガし、ネストされたすべてのジョブのコードを変更してそのようなフラグを渡すのが厄介なことです。理想的には、私はすべてのことを心配する必要はありませんので、現在のリクエストの設定を変更して(その後、それを通常の状態に戻したい)と思います。 –
アクションをモジュールにカプセル化し、モジュールから呼び出すことができます。しかし、それは以前に言及されたように迷惑になります。 – Canardgarou
適切な引数(arg [x]と " - o"または " - pdf"と一致する)がある場合、perform_nowで呼び出されたときに出力をトリガーする "before"または "after"を定義することができます。 – Canardgarou