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

问题描述 投票:3回答:2

...没有卸载最新版本。

我正在开发一个使用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。

ruby rubygems bundler rbenv
2个回答
4
投票

您可以使用rbenv-gemset插件 。 由于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

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

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

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
© www.soinside.com 2019 - 2024. All rights reserved.