如何告诉Bundler使用全系统安装的gems(生产部署)?

当使用Capistrano部署Rails应用程序时,我希望Bundler只在已经找到全系统安装的gems的情况下才能将gem安装到shared/bundles目录。 我该怎么做?

例如,如果我已经在系统上安装了pg gem v 0.14 ,我希望Bundler使用它,而不是在我的应用程序的shared/bundles目录中构建和安装新的。

我正在使用Ubuntu Server,并为多个用户安装了RVM。

Bundler允许使用共享 (rubygems)和vendored (bundler)gem,默认情况下, bundler/capistrano配置为:

 set :bundle_flags, "--deployment --quiet" 

只强制出售gem,

你可以用显式切换回共享的gem:

 set :bundle_flags, "--system --quiet" 

仍然在vendor安装,但也使用共享gem:

 set :bundle_flags, "--path #{shared_path}/bundles --quiet" 

如果部署已经使用--deployment (默认值)运行,则可以帮助运行部署一次:

 set :bundle_flags, "--no-deployment" 

这实际上是Bundler的一个function,本质上它是依赖性隔离 – 你不希望你的应用依赖于这样的外部系统gem。 然后,更新系统gem可能会对运行的应用程序产生影响。

如果您已经在使用capistrano,那么您应该在脚本中使用require "bundler/capistrano" ,无论如何都要将它们安装在shared/bundles 。 您也可以事先了解包装: http : //gembundler.com/v1.2/bundle_package.html