据我所知,Ruby on Rails 中的观察者模式并不是异步的,这意味着观察者的执行将阻止正在处理的动作。
我知道delayed_job gem,我真的很喜欢它,但有时对于某些用途来说它看起来有点太重了。
在 Observer 的回调中启动一个新线程怎么样?
我花了一些时间试图找出这种方法的利弊,但失败了。
那么问题来了:Observer 的线程有什么严重的缺陷吗?
据我所知,Ruby on Rails 中的观察者模式并不是异步的,这意味着观察者的执行将阻止正在处理的动作。
我知道delayed_job gem,我真的很喜欢它,但有时对于某些用途来说它看起来有点太重了。
在 Observer 的回调中启动一个新线程怎么样?
我花了一些时间试图找出这种方法的利弊,但失败了。
那么问题来了:Observer 的线程有什么严重的缺陷吗?
DelayedJob 和 Sidekiq 都提供了不错的选择,Rails 现在提供完整的 ActiveJob 支持,这里是官方文档 - https://guides.rubyonrails.org/v4.2/active_job_basics.html
DelayedJob 我认为是最长的,由构建 Shopify.com 的工作人员创建。它会在您的 Rails 应用程序和队列中创建一个表并以此为基础。对我来说,它提供了最简单的选项,因为它除了你的 rails 应用程序之外没有其他依赖项。
Sidekiq 也提供了一个很好的选择。它也非常简单且维护良好,但它不使用您的数据库,而是使用 redis 服务器来管理作业。这使得开发有点棘手,因为您必须安装 redis 并记住在运行应用程序时启动它。不难,只是有点额外的东西。
这是比较两者的快速指南 - DelayedJob 与 Sidekiq,希望对您有所帮助。