【问题标题】:Start Ruby on Rails app through systemd socket activation (i.e. start Rails server listening on pre-existing socket)通过 systemd 套接字激活启动 Ruby on Rails 应用程序(即启动 Rails 服务器侦听预先存在的套接字)
【发布时间】:2015-10-19 11:04:53
【问题描述】:

正如标题所述,我正在尝试通过 systemd 套接字激活来启动 Ruby on Rails 应用程序。我之前没有使用 Ruby 的经验,而且缺乏高质量的文档令人沮丧。

从 systemd 获取侦听套接字非常简单,尽管我正在努力使用该套接字。是否有接受预先存在的侦听套接字的应用程序服务器?还是我必须自己编写,可能通过实现 Rack::Handler (根据我从文档中收集到的有限信息)?在后一种情况下,一个最小的示例实现会很有帮助。

我正在寻找一种适合生产、轻量级、省力的解决方案,能够在嵌入式硬件上为平均 2 个并发用户提供服务。

【问题讨论】:

    标签: ruby-on-rails ruby systemd


    【解决方案1】:

    从 Puma 3.0.0 开始,其 Rack 模块支持套接字激活,rails server 使用该模块。这意味着从 systemd 运行bin/rails server puma 并激活套接字现在可以开箱即用(使用 Puma 3.9.1 测试)。需要注意的是,您必须在应用程序根目录中启动 bin/rails,而不是全局安装的版本。

    有关此设置的更多详细信息和一些示例,请参阅my blogpost

    【讨论】:

      【解决方案2】:

      在没有任何替代方案的情况下,我可能最终会使用Puma 网络服务器,它实现了 systemd 套接字激活协议

      编辑:Puma 确实实现了套接字激活,但不在 Rack 处理程序中。 我通过grep -r LISTEN_FDS 得出了我的初步结论,并且只有在我真正尝试过之后才发现我的错误。

      【讨论】:

      • 这似乎已在 Puma v3.0.0 中得到修复,请参阅commit 和我的blogpost 关于设置。
      猜你喜欢
      • 2014-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      相关资源
      最近更新 更多