2012-10-10 83 views
16

我使用Sidekiq我的後臺作業:Sidekiq工人沒有得到觸發

我有一個工人的應用程序/工人/ 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 

只要我從我的行動中觸發它的工作r沒有被調用.. Redis正在運行localhost:6379

任何想法爲什麼這一定會發生。環境是Linux。

+0

sidekiq運行?它在日誌中說什麼?你檢查過redis嗎,是否加入隊列:default? – Roman

+0

@羅曼:感謝您的回覆!是的,sidekiq和redis都在運行..作業也沒有被添加到默認隊列中......但是當我從控制檯觸發作業時,它的工作原理 – AnkitG

+0

也許在開發和生產環境中運行時有不同的數據庫或名稱空間。或者設置不同的隊列。 – Roman

回答

28

我也有類似的問題,即Sidekiq正在運行,但是當我打電話給perform_async,除了返回true,它什麼也沒做。

問題是rspec的-sidekiq添加到我的 「:發展:測試」 組。我通過將rspec-sidekiq僅限於「:測試」組來修復此問題。

+1

這是類似的問題在我的案件 – AnkitG

+1

我有同樣的確切問題。我不得不重建我的軟件包:'bundle install --without test' – keaplogik

+3

我在https://github.com/mperham/sidekiq/wiki/Problems-and-Troubleshooting#the-workers-不是開始爲將來的參考 – lkartono

1

我遇到了同樣的問題,事實證明我在函數perform_async中傳遞的參數不合適,似乎不應該在perform_async中傳遞任何查詢結果,您必須在函數中執行所有查詢執行。

2

您需要指定工作人員的隊列名稱。

例子: sidekiq_options重試:假的,:隊列=> data_import_worker

data_import_worker可以成爲你想給它的任何名稱。

然後,當你去到Web界面:yoursite.com/sidekiq,你就可以看到當前的工人隊列「data_import_worker」

0

我的問題是簡單地將工作文件放在錯誤的路徑中。

需要在 「project_root /應用/工人/ worker.rb」,而不是 「project_root /工人/ worker.rb」

檢查文件的路徑!

+2

/app/workers surely(複數) – mahemoff

6

從Rails應用程序的根目錄啓動sidekiq。例如,

束EXEC sidekiq -e分期-C配置/ sidekiq.yml

0

是它真的在獨立sidekiq運行多個工作者? 比如我有2名工人: ProccessWorker CallbackWorker

當我runnigs sidekiq

: 束EXEC sidekiq -r ./workers/proccess_worker.rb -C ./config/sidekiq。yml

同一時間只有一名工人。

1

對於我來說,當執行一個perform_later時,它會入隊,但不會從隊列中移除。我需要我的隊列名稱添加到sidekiq.yml文件

--- 
:concurrency: 25 
:pidfile: ./tmp/pids/sidekiq.pid 
:logfile: ./log/sidekiq.log 
:queues: 
    - default 
    - my_queue 
0

我打電話在生產控制檯perform_async(23),但是我sidekiq在臨時模式啓動。

在我開始生產模式下的Sidekiq後,事情已經開始奏效。

1

對此失去了15分鐘。要檢查Sidekiq是否正確加載配置文件(使用隊列名稱),請轉到Busy選項卡中的Web界面,您將找到Process ID並在其下方找到您的隊列。

在我們的案例中,我們拼錯了mailer(Mailers的正確ActiveJob隊列是mailers,複數)。