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

时间:2013-02-12 15:38:35

标签: ruby-on-rails rubygems rvm capistrano bundler

在部署带有Capistrano的Rails应用程序时,我希望Bundler只在shared/bundles目录中安装宝石,只要它找不到系统范围内安装的宝石。我该怎么做?

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

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

2 个答案:

答案 0 :(得分:4)

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

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

仅强制销售宝石,

您可以使用显式切换回共享宝石:

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

仍安装在vendor中,但也使用共享宝石:

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

如果部署已使用--deployment(默认值)运行,则可以通过以下方式运行部署:

set :bundle_flags, "--no-deployment"

答案 1 :(得分:0)

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

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