2
我有一個類(/lib/updater.rb
),可以大量更新數據庫(調用外部服務器,計算,...)。通常這個任務是由服務器的cron調用的(rake /lib/tasks/launch_updater.rake
,啓動updater.rb
),但我希望有機會從客戶端手動啓動它。Rails - 從控制器運行rake任務或新線程?
此時,從客戶端,用戶可以點擊一個按鈕,並以這種方式啓動它:
# the controller
Thread.new {
Updater.start
}
這是一個很好的解決方案或者是更直接從rake任務啓動?
# something like this from the controller
Rake::Task[params[:task]].reenable
Rake::Task[params[:task]].invoke
該任務應該是無阻塞的(用戶應該在應用中正常導航而不必等待任務結束)。
哪個更好?爲什麼?
可以使用延遲工作寶石做到這一點。看看這個https://github.com/collectiveidea/delayed_job – Arun
+1 @Arun謝謝你是一個很好的選擇,但是你對我的2個解決方案有什麼想法? – damoiser
恕我直言,線程不是一個好主意。做它作爲背景工作是最適合您的要求。在控制器中調用rake任務是不好的做法。 – Arun