Phusion 乘客(适合傻瓜!)
Posted
技术标签:
【中文标题】Phusion 乘客(适合傻瓜!)【英文标题】:Phusion Passenger (for Dummies!) 【发布时间】:2011-09-03 13:35:43 【问题描述】:我是一名经验丰富的 LAMP 开发人员,即将进入 Rails。我有一个非常愚蠢的问题要问:Phusion Passenger 到底是做什么的?
我已经阅读了很多文档,我在 Google 上搜索过,我已经阅读了 Wikipedia,我已经阅读了 Stack Overflow。我什至已经安装了它并让它在开发机器上运行(使用 Apache)。我仍然不知道它实际上在做什么。
这里有一个猜测:我认为 Apache 文档根指向 /mywebapp/public/
而不是 /mywebapp/
很奇怪,所以我认为这与使 /mywebapp/
中的所有内容都可访问有关。 (不过这是一个疯狂的猜测,因为我不知道这些东西是如何被访问的。)
我已经收集到,Passenger 是革命性的、开创性的等等,但是它做什么!?
抱歉,各位,n00b 问题。谢谢!
【问题讨论】:
【参考方案1】: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 文件而不是运行它们。
Passenger 并不完全是革命性的,但它确实在一个非常方便的包中集成了许多基本功能。使它如此伟大的原因在于它运行良好并且不需要太多关注。开箱即用。
【讨论】:
谢谢!现在我懂了。 Phusion 的人应该窃取这个答案并粘贴在他们的主页或其他地方。我在找到这个基本问题的答案时遇到了这么多麻烦,这让我有点震惊。【参考方案2】:它为 ruby on rails 应用程序(实际上是任何机架应用程序)提供服务。我用的是passenger的2.x版本直接集成到apache中,但是新版本支持standalone执行,我更喜欢以standalone模式运行(配合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 权限(对于乘客部分)。
【讨论】:
谢谢,法比奥。一旦我对这个新堆栈更有能力,我将不得不尝试其中一些代理技术。以上是关于Phusion 乘客(适合傻瓜!)的主要内容,如果未能解决你的问题,请参考以下文章