Phusion乘客(傻瓜!)

我是经验丰富的LAMP开发人员,他们正在向Rails进军。 我有一个非常愚蠢的问题:Phusion Passenger到底做了什么?

我已经阅读了很多文档,我已经谷歌search,我已经读过维基百科,我已经阅读了堆栈溢出。 我甚至安装了它,并在开发机器上运行(使用Apache)。 我仍然不知道它究竟在做什么

下面是一个猜测:我认为Apache文档根目录指向/mywebapp/public/而不是/mywebapp/ ,这很奇怪,所以我认为它必须将/mywebapp/所有内容都设置为可访问。 (这是一个疯狂的猜测,因为我不知道这些东西是如何被访问的。)

我已经知道乘客是革命性的,开创性的等等,但它是什么的?

对不起,每个人都有问题。 谢谢!

Passenger是一个准备和启动Ruby实例的系统,可用于基于Rack的应用程序,如Ruby on Rails。 Apache和nginx,这两个受支持的Web服务器平台,不能像PHP,Perl或Python那样运行Ruby,因为没有内置的Ruby模块能够像那样工作。 这意味着Ruby倾向于作为一个独立的进程组运行,Web服务器将不得不引导stream量通过。

Rails倾向于作为一个持续的过程运行,因为整个堆栈的启动时间很长。 乘客根据需要启动新的实例,并杀死那些不再需要的实例。 您可以在stream程列表中看到这一点,因为它们清楚地标识为“Passenger”和“Rails”前缀。

Passenger的一个特点是它将重新使用Rails堆栈的一部分,以便创build更多的进程更快,克隆一个实例,而不是从头开始一个新的实例。 加载器是用C ++编写的,能够尽可能高效地处理每个Ruby进程的正确configuration和启动,并通过在不同进程间共享来节省内存。

你把东西放在public/目录下的原因是为了避免暴露你的应用程序代码库。 PHP需要正确configuration,以防止人们简单地浏览目录并下载源代码,因为静态内容和可执行脚本之间没有特别的区别。 例如,错误configuration的服务器将很乐意提供原始的.php文件,而不是运行它们。

乘客并不完全是革命性的,但它确实在一个非常方便的包裹中包含了许多重要的function。 是什么让它如此伟大的事情是,它运作得很好,并不需要太多的关注。 开箱即可使用。

它在rails应用程序(实际上是任何机架应用程序)上提供ruby。 我使用的乘客版本2.x直接集成到Apache,但与支持独立执行的新版本,我更喜欢运行它在独立模式(结合rvm)

它可以在开发模式和生产模式中都非常有用,并且加速了RoR应用的执行。

为了部署RoR应用程序,我使用它自己的gemset安装它,然后用gem install passenger (您也可以安全地跳过gemset,但是它们会隔离应用程序环境,所以它们很好)。 之后,您可以启动passenger start -a 127.0.0.1 -p 3081 -e production项目根目录中的应用程序。

然后我configuration一个Apache vhost工作在反向代理模式下,像这样的文件

 <VirtualHost *:80> ServerName your.server.org ProxyPass / http://localhost:3081/ ProxyPassReverse / http://localhost:3081/ ProxyRequests Off # Local reverse proxy authorization override # Most unix distribution deny proxy by default (ie /etc/apache2/mods-enabled/proxy.conf in Ubuntu) <Proxy http://localhost:3081/*> Order deny,allow Allow from all </Proxy> </VirtualHost> 

你没问题,你的应用程序部署了本地configuration,甚至不需要root权限(对于乘客部分)。