2016-05-18 112 views
0

讓我們舉個例子:在Rails控制器執行很短的後臺任務

class UsersController 
    def create 
    User.create(...) 
    PushService.push('you have a new friend') # Can take 1/2 seconds 
    end 
end 

我想執行一個短任務控制器(推一些用戶)。我不同步做它,因爲它可以增加響應時間,但使用ResqueSidekiqDelayJob似乎誇大了我。

使用簡單的Thread會帶來什麼後果,在控制器中使用它會是一個好的做法嗎?你有其他的選擇嗎?

+0

通過使用sidekiq,您可以從單行代碼運行類方法... – Mukesh

回答

1

啓動一個線程它不至於讓簡單的事情,但你必須手動處理它的所有可能性會錯(冷凍,例外)

您可能要考慮使用sucker_punch ActiveJob後端 - 它在進程中運行任務,但是您將擁有activejob(更簡單的測試,生成器等)的好處,並在需要時能夠在以後切換到其他後端。

+0

我不明白sucker_punch和ActiveJob之間的區別。他們似乎做同樣的事情,將隊列存儲在RAM中。你推薦一個比另一個更好嗎? –

+0

@JérômeBoé一個是後端到另一個。像MySQL/postgres到ActiveRecord – Vasfed