gpt4 book ai didi

ruby-on-rails - Phusion Passenger 如何重用线程和进程?

转载 作者:数据小太阳 更新时间:2023-10-29 06:46:01 26 4
gpt4 key购买 nike

我正在设置一个 Apache2 网络服务器,使用 Phusion Passenger 运行多个 Ruby on Rails 网络应用程序。我知道 Passenger 生成 Ruby 进程来处理请求。我有以下问题:

  • 如果必须同时处理多个请求,Passenger 会生成多个进程还是多个 (Ruby) 线程?如何配置它以使其始终生成单线程进程?
  • 如果我有两个 Rails 应用程序,假设对应用程序 A 的请求进入进程 1,然后对应用程序 B 的请求到达。进程 1 是否也可能处理此请求?什么时候以及如何做到这一点?换句话说,是否允许一个进程处理多个 Rails 应用程序的请求?
  • 我在多个 URL 和多个虚拟主机(例如 http://和 https://)中导出了相同的 Rails 应用程序。同一个进程是否能够服务于不同的虚拟主机? (这个问题的答案似乎是肯定的,我在响应对虚拟主机 A 的请求时设置了一个全局变量,并且我能够在虚拟主机 B 中检索该值。)

最佳答案

一般来说,Passenger 通过派生一个 ApplicationSpawner 来生成新进程,ApplicationSpawner 已经将框架和应用程序代码预加载到内存中,或者派生出一个只有框架代码的 FrameworkSpawner。

据我所知,Passenger 不处理线程。相反,随着应用程序负载的增加,它将 fork 该应用程序的 ApplicationSpawner 并初始化另一个实例。当负载降低时,一个或多个应用程序实例将被关闭。

如果 Passenger 以某种方式配置(我相信通过选择“智能”spawn 方法),它将创建一个 FrameworkSpawner,它加载 rails 代码,但没有应用程序代码,然后可以 fork 加载和应用程序使用那个版本的 Rails。

所以回答你的问题:

  • 它将按顺序为它们提供服务,然后在确定负载足够高时生成额外的进程。

  • 没有。一个进程只能属于一个 Rails 应用程序。

  • 我对这个有点粗略,但您的实验很有意义。 Passenger 应该足够聪明,知道即使它从服务器配置中的不同位置运行,您也在谈论同一个应用程序。它可能基于应用程序的文件系统路径。

编辑:我去阅读了一下。事实证明我基本上是对的,但技术细节有点不对劲。查看Passenger documentation

关于ruby-on-rails - Phusion Passenger 如何重用线程和进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/821820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com