如何在Ruby项目中使用旧版本的Bundler?

时间:2016-04-25 05:34:42

标签: ruby rubygems bundler rbenv

...无需卸载最新版本。

我正在使用Bundler 1.10的项目,但是我将Bundler 1.11用于我的所有其他项目。由于这个项目是在1.10,因此每当我运行任何bundle命令时,由于Bundler 1.11引入的格式不同,我的Gemfile.lock会发生变化。

我到目前为止找到的唯一解决办法就是运行我的所有命令:

bundle _1.10.6_ [command]

(来自这个答案:https://stackoverflow.com/a/4373478/1612744

有更好的方法吗?我使用的是rbenv,而不是rvm。

2 个答案:

答案 0 :(得分:4)

您可以使用the rbenv-gemset plugin。由于rbenv gemset中较旧版本的gem不会覆盖默认gemset中的较新版本,因此您需要为每个项目安装bundler,这非常麻烦。

  • 安装插件(cd ~/.rbenv/plugins; git clone git://github.com/jf/rbenv-gemset.git)或者,如果您使用自制程序,brew install rbenv-gemset
  • gem uninstall -xI bundler
  • 对于每个可以使用bundler 1.11的项目,
    • cd到项目
    • echo bundler-1.11 > .rbenv-gemsets(“bundler-1.11”是gemset的名称)
  • 在其中一个项目中,gem install bundler获取当前版本,1.11。*
  • 对于需要捆绑器1.10的项目,
    • cd到项目
    • echo bundler-1.10 > .rbenv-gemsets(“bundler-1.10”是gemset的名称)
    • gem install bundler -v 1.10.6

答案 1 :(得分:3)

我最终用别名和bash函数解决了这个问题。在我的~/.bashrc中,我添加了这个:

versioned_bundle() {
  version_file=${PWD}/.bundle/version
  if [[ -r $version_file ]]; then
    version=$(<$version_file)
    bundle _${version}_ "$@"
  else
    bundle "$@"
  fi
}
alias bundle=versioned_bundle

正如您可以从代码中猜到的那样,我还在项目的version目录中添加了.bundle/文件。该文件的内容:

1.10.6

每当我运行bundle时,我的shell都会检查当前目录中的版本文件,如果找到它,则运行该版本的bundle。

$ cd project-with-old-bundle-version
$ bundle --version
1.10.6
$ cd anywhere-else
$ bundle --version
1.11.2