当您的 Gemfile 需要旧版本的捆绑器时,如何“捆绑安装”?

Posted

技术标签:

【中文标题】当您的 Gemfile 需要旧版本的捆绑器时,如何“捆绑安装”?【英文标题】:How to `bundle install` when your Gemfile requires an older version of bundler? 【发布时间】:2012-08-19 01:05:41 【问题描述】:

我在一个具有 Gemfile 的旧 Rails 项目中。我尝试向 Gemfile 和 bundle install 添加 gem,但出现错误:

Bundler could not find compatible versions for gem "bundler":
  In Gemfile:
    rails (= 3.0.0) ruby depends on
      bundler (~> 1.0.0) ruby

  Current Bundler version:
    bundler (1.1.5)

This Gemfile requires a different version of Bundler.

它使用的 Rails 版本需要 bundler ~>1.0.0,但我已经安装了 1.1.5,并将其用于我的其他项目。通常我会使用bundle exec ...,但由于这是我们正在谈论的捆绑程序,它比这更复杂一些。如何在我的 Gemfile 中添加 gem 并在使用所需的 bundler 版本时运行 bundle install

【问题讨论】:

我想先卸载 1.1.5 bundler。然后安装 1.0.0。这将解决。也许有更好的解决方案? 【参考方案1】:

首先你需要安装合适版本的 bundler:

% gem install bundler -v '~> 1.0.0'
Successfully installed bundler-1.0.22

然后强制 ruby​​gems 使用你想要的版本(see this post):

% bundle _1.0.22_ install

【讨论】:

为什么这不在 Bundler 文档中?!?谢谢,在浪费了比我愿意承认的更多时间之后,您的回答终于解释了我需要什么。 如今要获得精确版本,您将需要使用gem install bundler -v '=1.16.0' 现在不工作了。它不能强制rubygems使用bundle _1.0.22_ install指定的版本 我刚刚使用了这种方法,它对我有用@Alec.Zhou。我同时安装了bundler 2.2.15bundler 2.2.16【参考方案2】:

错误消息In Gemfile: bundler (~> 1.16) 有点不准确,因为版本号要求可能来自其他地方,例如.gemspec 文件,对我来说就是这种情况:

spec.add_development_dependency "bundler", "~> 1.16"

.gemspec 文件中删除版本号为我解决了这个问题:

spec.add_development_dependency "bundler"

【讨论】:

【参考方案3】:

我在 macOS Mojave 上遇到了同样的问题。我安装了不同版本的 bundler gem 并卸载了当前版本。

gem install bundler -i '2.0.1'

gem uninstall bundler

然后让我选择要卸载的版本,然后我选择造成问题的版本。

【讨论】:

不一定是推荐的这样做方式。我会先尝试接受的答案,根据更高版本,您可能还有其他 gem,您可以单独运行它们。【参考方案4】:

这是我必须做的才能让它与以前版本 (2.2.11) 的捆绑器一起安装:

gem install bundler:2.2.11
bundle _2.2.11_ install

【讨论】:

以上是关于当您的 Gemfile 需要旧版本的捆绑器时,如何“捆绑安装”?的主要内容,如果未能解决你的问题,请参考以下文章

您的 Ruby 版本是 2.0.0,但您的 Gemfile 指定了 2.1.0

如何为 Gemfile 指定最低捆绑器版本?

当您的数据库架构发生变化时处理旧版本移动应用程序的正确方法

如何在协作上下文中处理捆绑器更新(Gemfile.lock)?

Rails:Gemfile.lock 需要“找不到捆绑程序”(2.2.11)。 (Gem::GemNotFoundException)

您的 Ruby 版本是 2.0.0,但您的 Gemfile 指定了 2.1.1