在部署带有Capistrano的Rails应用程序时,我希望Bundler只在shared/bundles
目录中安装宝石,只要它找不到系统范围内安装的宝石。我该怎么做?
例如,如果我已经在系统上安装了pg
gem v 0.14
,我希望Bundler使用它,而不是在我的shared/bundles
目录中构建并安装新的应用。
我正在使用Ubuntu Server,并为多个用户安装了RVM。
答案 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