Web开发

首页 » 常识 » 诊断 » Rails之WEB服务器amp应
TUhjnbcbe - 2021/3/5 16:24:00
WEB服务器应用服务器

当你搜索如何发布你的rails应用时,会发现很多名词Apache,Unicorn,Puma,PhusionPassenger,Nginx,Rainbows等等,看起来好像都差不多,都可以用来发布,但是他们是有区别的,一些是"webservers",一些是"appservers".

如果你知道他们属于哪一种类型,哪一种适合你的系统,对于发布来说就轻松了很多,但是区分他们往往心里没有那么清晰。

什么是webserver?它和appserver到底哪里不同?可以单独使用一个吗?哪个是在Rack基础上做的封装?通过下面的讲解,这些问题就会得到解答。

什么是webserver?

一个webserver是一个用来接收来自站点请求,并做一些处理的程序,它可能会把请求转发给你的Rails应用,Nginx和Apache就是两个比较常见的webserver。

如果你请求不经常变,例如请求静态资源css,js,imgages,你的Rails应用可能不需要关心这些,webserver不要与Rails应用交互,而自己来处理这些请求。

webserver可以处理SSL请求,静态文件,做一些大多数站点需要处理的事情,如果你的Rails应用需要处理某个请求,那么webserver会转发给你的appserver。

什么是appserver?

一个appserver是真正运行Rails应用的程序,appserver来加载你的代码运行在内存中,当appserver接收到来自webserver的请求,它会告诉你的Rails应用,当你的Rails应用处理完后,appserver返回response给webserver,webserver返回给最终用户。

没有webserver,你同样可以运行大部分appserver,但是大多数是在开发环境下,在生产环境中通常需要一个webserver在前面,webserver可以同时处理多个应用,快速的返回资源文件。

Rails有很多appserver,比如Mongrel(现在已经很少用了)Unicorn,Thin,Rainbows,andPuma,每一个都有各自的优点和缺点,但是他们都会完成一个事情,就是运行你的Rails应用并处理请求。

Passenger是做什么的?

Passenger有一些特别,它可以作为appserver使用。也可以内置到webserver中,所以你不需要一个单独的appserver来运行你的Rails应用。这非常方便,尤其是当你准备运行多用应用的,但是又不想花费时间为每一个应用设置一个appserver的时候,就可以使用Passenger,安装完Passenger,只需要指定Rails应用的目录即可,而不要再设置appserver。

Passenger是一个不错的选择,但是有单数的appserver还是最好的,你可以选择更适合你的应用的appserver,自己来管理和运行Rails应用。

Rack是做什么的?

Rack可以使的这些appserver能够运行我们的Rails应用或者Sinatra应用,Padrino应用等,Rack就像Rubyweb框架(Rails,Sinatra)与appserver之间通信的一种通用语言,底层上的通信规范是统一的。

他们是如何联系的?

一个web请求会先到达webserver,如果这个请求需要Rails应用处理,那么webserver先做一些处理后,再交给appserver,appserver通过Rack与Rails应用通信,当应用完成请求处理后,Rails应用返回处理结果给appserver,最后webserver再返回给用户。

再具体一点,Nginx把请求转发给Unicorn,Unicorn通过Rack转发给Rails,Rails通过路由找到对应的控制器,控制器进行最终的处理

当你理解了appserver与webserver是如何协同工作的,再处理服务器问题的时候就会容易很多,如果以后更新了更牛的appserver,你也会轻松的切换过去。

michael

客官请自便

1
查看完整版本: Rails之WEB服务器amp应