我正在建立一个使用Phusion Passenger运行多个Ruby on Rails Web应用程序的Apache2 Web服务器。我知道Passenger会生成处理请求的Ruby进程。我有以下问题:
答案 0 :(得分:12)
一般来说,Passenger通过分支ApplicationSpawner来生成新进程,ApplicationSpawner将框架和应用程序代码预加载到内存中,或者FrameworkSpawner,它只有框架代码。
据我所知,乘客不会处理线程。相反,随着应用程序上的负载增加,它将分叉该Application的ApplicationSpawner并初始化另一个实例。当负载减少时,一个或多个应用程序实例将被终止。
如果以某种方式配置Passenger(我相信通过选择“智能”spawn方法),它将创建一个FrameworkSpawner,它加载rails代码,但没有应用程序代码,然后可以分叉加载和应用程序使用该版本的Rails。
所以回答你的问题:
它将依次为它们提供服务,如果它确定负载足够高,则会产生其他进程。
没有。一个进程只能属于一个Rails应用程序。
我对这个有点粗略,但你的实验很有意义。乘客应该足够聪明,即使它从服务器配置中的不同位置运行,你也在谈论相同的应用程序。它可能基于应用程序的文件系统路径。
答案 1 :(得分:6)