Phusion Passenger(傻瓜!)

时间:2011-05-27 16:53:06

标签: ruby-on-rails passenger

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

我已经阅读了很多文档,我用谷歌搜索过,我读过维基百科,我读过Stack Overflow。我甚至已经安装它并让它在开发机器上运行(使用Apache)。我仍然不知道它实际上是在做什么。

这是一个猜测:我认为Apache文档根指向/mywebapp/public/而不是/mywebapp/是很奇怪的,所以我认为这与使/mywebapp/内的所有内容都可访问有关。 (这是一个疯狂的猜测,基于我不知道这些东西是如何被访问的事实。)

我认为Passenger是革命性的,开创性的等等,但它做什么

对不起n00b问题,大家好。谢谢!

2 个答案:

答案 0 :(得分:47)

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

Rails往往作为持久进程运行,因为整个堆栈的启动时间非常重要。乘客在需要时启动新实例,并将杀掉那些不再需要的实例。您可以在流程列表中看到这一点,因为它们使用“Passenger”和“Rails”前缀明确标识。

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

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

乘客并非完全具有革命性,但它确实在一个非常方便的包装中融入了许多基本功能。使它如此伟大的原因是它运作良好并且不需要太多关注。开箱即用它已经准备好了。

答案 1 :(得分:6)

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

它在开发模式和生产模式下都非常有用,它可以加速RoR应用程序的执行。

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

然后我将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>

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