ruby on railsで、非同期処理の結果を受け取って、controllerが呼び出された際にブラウザ上に表示したいです。
activeJobとSidekiqを用いることを想定しています。
現状は以下の通りです。
- job
ruby
1#app/jobs/test_job.rb 2 class TestJob < ApplicationJob 3 queue_as :default 4 5 def perform(**message) 6 message["hello"]="world" 7 return message 8 end 9 end
- controller
#app/controllers/test_controller.rb class TestController < ApplicationController def index @message={} @message=TestJob.perform_later(@message) render json: @message end end
- 理想とする表示
{hello:world}
- 実際の表示
{ "arguments":[ {} ], "job_id": "4b55f945-a2a2-4711-9229-060c0a567aef", "queue_name": "default", "priority": null, "executions": 0, "provider_job_id": "e04782f39c95840de0689a70" }
どうやら自分のコードだとmessageはenqueueの成功状況を受け取っているっぽい&ActiveJobでreturnはつかえなさそう ということは想像がついたのですが、正しい方法に自力では行きつけませんでした。
どなたかご教授お願いいたします。
また先述の通り非同期処理にはsidekiq
を使っていますが、sidekiqで無理ということであれば別のgemもしくはやり方を教えていただけると助かります。
(追記)
最終的には、とあるAPIから10件程度のデータをうけとって、そのデータ1件1件を別のあるAPIに投げていき、それらすべての結果を表示するといったことをやりたいと考えています。
別APIからのレスポンスを受け取るのが、1件あたり2秒、合計で20秒ほどかかってしまうので、非同期処理にしようとしてる次第です
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/26 22:41 編集