20

私はバックグラウンドの仕事にSidekiqを使用しています:

ワーカーアプリ/workers/data_import_worker.rbがあります

class DataImportWorker
 include Sidekiq::Worker
 sidekiq_options retry: false

  def perform(job_id,file_name)
    begin
    #Some logic in it .....
  end
 end

ファイルlib/parse_excel.rbから呼び出されます

  def parse_raw_data
      #job_id and #filename are defined bfr
      DataImportWorker.perform_async(job_id,filename)   
  end

アクションからトリガーするとすぐに、ワーカーは呼び出されません。Redisはで実行されていますlocalhost:6379

なぜこれが起こっているに違いないのか考えてみてください。環境はLinuxです。

4

9 に答える 9

2

同じ問題が発生しました。関数perform_asyncで渡した引数が適切ではないことがわかりました。perform_asyncでクエリ結果を渡すべきではないようです。関数performですべてのクエリを実行する必要があります。

于 2013-01-10T08:48:23.003 に答える
1

私が perform_later を実行すると、キューに入れられますが、キューから削除されることはありません。sidekiq.yml ファイルにキュー名を追加する必要がありました

---
:concurrency: 25
:pidfile: ./tmp/pids/sidekiq.pid
:logfile: ./log/sidekiq.log
:queues:
  - default
  - my_queue
于 2016-11-11T23:12:49.620 に答える
1

ワーカーが対象とするキューの名前を指定する必要があります。

例: sidekiq_options retry: false, :queue => data_import_worker

data_import_worker には任意の名前を付けることができます。

次に、Web インターフェース (yoursite.com/sidekiq) にアクセスすると、キュー「data_import_worker」の現在のワーカーを確認できます。

于 2013-01-12T02:05:25.870 に答える
0

私の問題は、単純にワーカー ファイルが間違ったパスにあることでした。

「project_root/worker/worker.rb」ではなく「project_root/app/worker/worker.rb」にある必要があります

ファイルパスを確認してください!

于 2013-11-19T14:13:17.993 に答える
0

スタンドアロンの sidekiq で複数のワーカーを本当に実行していますか? たとえば、2 つのワーカーがあります: ProcessWorker CallbackWorker

sidekiq を実行しているとき: bundle exec sidekiq -r ./workers/proccess_worker.rb -C ./config/sidekiq.yml

同時に 1 人のワーカーのみ。

于 2014-10-21T12:21:39.563 に答える