在另一个线程中执行任务

时间:2014-02-21 09:51:36

标签: ruby-on-rails

我是Rails开发的新手,我有一个问题。有以下代码:

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

此代码创建新订单,呈现json结果并发送有关它的电子邮件。邮件发送需要一些时间,我想我应该在另一个线程或类似的东西。请给我建议我怎么做得好。谢谢!

2 个答案:

答案 0 :(得分:0)

您应该使用延迟电子邮件发送。例如,你可以使用Sidekiq,Delayed Job或Resque来做到这一点。

您还可以延迟使用这些宝石的任何其他工作。

您应该查看文档,看看哪种文档最适合您使用。

我个人使用Sidekiq,但Delayed Job是最容易安装的,如果您只想将它​​用于邮件程序。

答案 1 :(得分:0)

我们使用Spawn:它现在改名为“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