【问题标题】:How can I use an older version of Bundler for a Ruby project?如何将旧版本的 Bundler 用于 Ruby 项目?
【发布时间】:2016-04-25 05:34:42
【问题描述】:

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

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


    【解决方案1】:

    您可以使用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(“bundle-1.11”是 gemset 的名称)
    • 在其中一个项目中,gem install bundler 获取当前版本 1.11.*
    • 对于需要 bundler 1.10 的项目,
      • cd给项目
      • echo bundler-1.10 > .rbenv-gemsets(“bundle-1.10”是 gemset 的名称)
      • gem install bundler -v 1.10.6

    【讨论】:

    • “由于 rbenv gemset 中旧版本的 gem 不会覆盖默认 gemset 中的新版本,因此您需要为每个项目安装 bundler,这相当麻烦。”啊,是的,这很不理想。理想情况下,我只需要在这个项目的目录中做一些事情,而不必在其他任何地方做任何事情......
    【解决方案2】:

    我最终用别名和 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-25
      • 2014-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-09
      相关资源
      最近更新 更多