是否可以 运行 Sidekiq 与 puma rails 服务器在同一个进程中?

Is it possible to run Sidekiq in the same process with a puma rails server?

它的架构有什么难做的地方吗?

我想 运行 现有的 rails+sidekiq 应用程序在内存很少的 VM 中,并且在两个不同的进程中加载​​整个 rails 堆栈会占用大量内存内存。

Puma 旨在启动同质网络工作线程,并将传入的请求分配给它们。如果你想修改它以产生单独的 Sidekiq 线程,它在技术上应该可以用一个疯狂的 puma.rb 文件,但我没有找到这样做的先例(编辑:Mike 在下面的回答指出 sucker_punch gem 基本上可以做到这一点,出于同样的内存效率目的)。 Practically-speaking,如果您的 VM 不能同时支持 运行 两个 Rails 进程,它可能无法处理增加的内存负载,因为您的应用程序同时处理 Sidekiq 和Puma……但这取决于你的工作量。

如果这仅用于开发目的,您可以通过打开 Sidekiq's inline mode(通常仅用于测试)来完成您正在寻找的内容:

require 'sidekiq/testing'
Sidekiq::Testing.inline!

这将导致所有 perform_async 调用实际执行内联,而不是进入 Redis 并被 Sidekiq 进程接收。

没有官方消息。

这就是 sucker_punch 的设计目的。