即使我的应用程序使用捆绑包,我是否需要将乘客安装为常规gem?

我试图设置一个新的服务器来托管Rails应用程序,并希望干净安装所有组件,所以我决定使用rvm + bundler。 这是我第一次设置Rails服务器。

我之前使用过捆绑式应用程序,我了解它如何管理应用程序的依赖…但是因为我正在安装Passenger,因为这是托管环境的依赖性,我需要在盒子本身做一个“gem安装乘客”捆绑这种依赖,对吧? 或者我应该将乘客放在应用程序的Gemfile中?

应用程序本身可以在没有安装乘客的情况下运行(独角兽,webrick,mongrel,thin等),因此乘客不应该真正在Gemfile中。 在这种情况下,将乘客单独安装为gem将是正确的选择。

查看Gemfile作为应用程序正在使用的gem的列表。 Passenger正在使用您的应用程序向用户提供数据,而不是使用它的应用程序。 在未来,您可以考虑使用其他应用程序服务器,您不必更改应用程序的任何部分,甚至是Gemfile,以进行更改。

但是,如果您的应用程序实际上是在内部使用乘客特定function或乘客gem的一部分,那么您应该包括它。 例如,如果您使用的是乘客声明的类,那么您将依赖它,并且应该将它包含在您的Gemfile中。

您应该阅读RVM的使用Passenger with RVM的指南。

简而言之,由于您的Web服务器一次只能使用一个版本的Ruby和一个版本的Passenger,您只需要安装一次Passenger,但是如果它也为各个gemsets安装(因此在您的Gemfile中也不应该受到伤害) )。 Rails也不需要装载乘客(即require 'passenger' ),所以这也不是问题。

(就个人而言,我更喜欢在服务器上使用bundle install --deployment ,在本地使用RVM)。