在 rails 控制器中执行一个简短的后台任务

Execute a short background task in a rails controller

举个例子:

class UsersController
  def create
    User.create(...)
    PushService.push('you have a new friend') # Can take 1/2 seconds
  end
end

我想在控制器中执行一个短任务(推送一些用户)。我不同步执行,因为它会增加响应时间,但使用 ResqueSidekiqDelayJob 对我来说似乎有些夸张。

使用简单的 Thread 会产生什么后果,在控制器中使用它是一种好的做法吗?你有其他选择吗?

启动一个线程对于简单的事情来说并没有那么糟糕,但是你必须手动处理它出错的所有可能性(冻结,异常)

您可能想研究使用 sucker_punch ActiveJob 后端 - 它运行进程中的任务,但您将获得 activejob 的好处(更容易测试、生成器等)以及稍后切换到其他后端的能力, 如果需要的话。