我是Rails开发新手,我有一个问题。有以下代码:在另一个线程执行任务
def create
@order = current_user.orders.create!(order_params)
OrderMailer.send_order_info(@order).deliver
end
此代码创建一个新订单,呈现json结果并发送有关它的电子邮件。邮件发送需要一些时间,我想我应该在另一个线程或类似的东西上做。请给我建议,我该如何做到这一点。谢谢!
我是Rails开发新手,我有一个问题。有以下代码:在另一个线程执行任务
def create
@order = current_user.orders.create!(order_params)
OrderMailer.send_order_info(@order).deliver
end
此代码创建一个新订单,呈现json结果并发送有关它的电子邮件。邮件发送需要一些时间,我想我应该在另一个线程或类似的东西上做。请给我建议,我该如何做到这一点。谢谢!
您应该使用延迟电子邮件发送。你可以用Sidekiq,Delayed Job或Resque来做。
您还可以使用这些宝石推迟任何其他工作。
你应该看看文档,看看哪一个最适合你的使用。
我个人使用Sidekiq,但如果您只想将它用于邮件程序,最容易安装Delayed Job。
我们用菌种此:它更名为 “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
Yo你可以使用[sidekiq](https://github.com/mperham/sidekiq),[delayed_job](https://github.com/collectiveidea/delayed_job),[resque](https://github.com/resque/resque)或类似的东西。 –