2016-05-18 53 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