【发布时间】:2016-04-04 17:05:27
【问题描述】:
它的架构中是否有什么让它难以做到?
我想在内存很少的 VM 中运行现有的 rails+sidekiq 应用程序,并且在两个不同的进程中加载整个 rails 堆栈会占用大量 RAM。
【问题讨论】:
标签: ruby-on-rails sidekiq puma
它的架构中是否有什么让它难以做到?
我想在内存很少的 VM 中运行现有的 rails+sidekiq 应用程序,并且在两个不同的进程中加载整个 rails 堆栈会占用大量 RAM。
【问题讨论】:
标签: ruby-on-rails sidekiq puma
Puma 旨在启动同质 Web 工作线程,并在它们之间划分传入请求。如果您想修改它以生成单独的 Sidekiq 线程,从技术上讲,使用疯狂的 puma.rb 文件应该是可能的,但我找不到这样做的先例(编辑:下面 Mike 的回答指出,sucker_punch gem 基本上可以这样做是为了提高内存效率)。实际上,如果您的 VM 不能支持同时运行两个 Rails 进程,它可能无法处理增加的内存负载,因为您的应用程序同时执行 Sidekiq 和 Puma 的工作……但这取决于您的工作量。
如果这只是出于开发目的,您可以通过打开Sidekiq's inline mode(通常仅用于测试)来完成您正在寻找的内容:
require 'sidekiq/testing'
Sidekiq::Testing.inline!
这将导致所有 perform_async 调用实际执行内联,而不是进入 Redis 并被 Sidekiq 进程拾取。
【讨论】:
没有官方的。
这就是sucker_punch 的用途。
【讨论】: