当您的 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
然后强制 rubygems 使用你想要的版本(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.15
和bundler 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.lock)?
Rails:Gemfile.lock 需要“找不到捆绑程序”(2.2.11)。 (Gem::GemNotFoundException)