首页 > 解决方案 > 如何为 Hanami 应用程序配置 Puma?

问题描述

我有一个 Hanami 1.3.3 应用程序,它应该与 Puma 作为生产网络服务器一起运行。我想在集群模式下使用 puma 并正确使用 preload_app。现在我正在为正确的 Puma 配置而苦苦挣扎。我知道,每个子进程(工作者)都必须有自己的新 DB 连接、redis 连接等。我的应用程序使用多个 db 连接、redis、sidekiq。主数据库通过 hanami-model 处理,其他数据库直接使用 pg-gem 处理(连接设置在class::initialize)。

处理这个的正确的hanami方式是什么?

这是一种方法:

workers 4
threads 1, 8

preload_app!

rackup      DefaultRackup
port        2300
environment 'production'

on_worker_boot do
  require_relative "config/environment"
  Hanami.boot
end

那是对的吗?对我来说感觉不对。

跟随更好吗?

# ...
on_worker_boot do
  Hanami::Model.disconnect # but what happens to the opened db-connections of parent-process?
  Hanami::Model.load!
  # redis??
  # sidekiq??
end

谢谢

标签: rubyrackpumahanamihanami-model

解决方案


hanami/chat的一位同事的帮助下,我最终完成了以下 Puma 配置:

require_relative './environment'
workers 2

threads_count = 5
threads threads_count, threads_count

daemonize true

preload_app!

rackup      DefaultRackup
port        2300
environment 'production'

on_worker_boot do
  Hanami.boot
end

以下是帮助我得出结论的信息:

彪马和铁轨

Hanami.boot 的定义

Hanami.disconnect 的定义


推荐阅读