2014-02-21 157 views
0

我是Rails開發新手,我有一個問題。有以下代碼:在另一個線程執行任務

def create 
    @order = current_user.orders.create!(order_params) 
    OrderMailer.send_order_info(@order).deliver 
end 

此代碼創建一個新訂單,呈現json結果併發送有關它的電子郵件。郵件發送需要一些時間,我想我應該在另一個線程或類似的東西上做。請給我建議,我該如何做到這一點。謝謝!

+1

Yo你可以使用[sidekiq](https://github.com/mperham/sidekiq),[delayed_job](https://github.com/collectiveidea/delayed_job),[resque](https://github.com/resque/resque)或類似的東西。 –

回答

0

您應該使用延遲電子郵件發送。你可以用Sidekiq,Delayed Job或Resque來做。

您還可以使用這些寶石推遲任何其他工作。

你應該看看文檔,看看哪一個最適合你的使用。

我個人使用Sidekiq,但如果您只想將它​​用於郵件程序,最容易安裝Delayed Job

+0

I.e. JSON響應將立即呈現,電子郵件任務稍後? – malcoauri

+0

是的,郵件將從另一個線程發送,並且不會凍結您的應用程序。所有郵件將在延遲隊列中排隊,並從延遲作業線程發送出去。 –

+0

哪個寶石可以作爲最簡單的寶石建議? – malcoauri

0

我們用菌種此:它更名爲 「Spawnling」 現在

https://github.com/tra/spawnling

非常容易使用:(控制器)

@user = User.create(params[:user]) 
spawn do 
    @user.do_some_slow_background_stuff 
end 

,或者,如果你想監視後臺進程是否已完成(@spawn_id是pid)

@user = User.create(params[:user]) 
spawner = spawn do 
    @user.do_some_slow_background_stuff 
end 
@spawn_id = spawner.handle 
相關問題