解决方法
Mongrel基本上是一个呈现HTTP接口的Ruby应用服务器.它有一件事,请求,将其传递到您的红宝石代码,并在http中提供答案.它不处理并发或任何性能相关的功能.一个杂种意味着有一个可以处理请求的红宝石进程.
> Nginx是一款功能齐全的Web服务器,旨在表演.它可以在静态文件上提供高性能,无法直接处理Ruby,Python或任何其他语言.它依赖于FastGCI或代理其他应用程序服务器来做到这一点.
要清楚,你的rails应用程序本身是不可直接使用的,它需要你可以调用一个容器(我建议你读一些约http://rack.github.com/),在这种情况下是Mongrel.当您运行rails控制台时,通常是webrick,我们在Ruby中最基本的Web“app”服务器(它是标准库的一部分).
那我们为什么在前面使用Nginx呢?我们假设我们只使用Mongrel:我们在一个mongrel实例上进行侦听,侦听端口80.如果你的请求需要500毫秒来完成,你可以每秒处理2个客户端.但是这显然还不够.让我们再发一个混杂的例子.但是,由于我们已经使用了第一个端口,所以我们不能在80端口上听,我们无法做到这一点.
所以我们需要一些可以处理多个Mongrel实例的东西,通过仍然监听端口80.你扔在一个Nginx服务器中,将(代理)将请求发送给你的许多杂项实例,你现在可以添加更多的实例来服务更多客户同时进行.
返回回答您的问题,将Nginx与rails服务器通信,意味着启动一个或多个Mongrel(或Thin / Unicorn,无论服务器可用),并通知Nginx必须将请求传递给他们.在使用Passenger之后,主要的rails服务是一个受欢迎的模式,它为Apache工作人员处理ruby代码提供了一种方式.