我在一个有 Gemfile 的旧 Rails 项目中。我试图将一个 gem 添加到 Gemfile 和
bundle install
但出现错误:
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 并在使用它需要的捆绑程序版本时运行bundle install
?
首先你需要安装合适版本的bundler:
% gem install bundler -v '~> 1.0.0'
Successfully installed bundler-1.0.22
然后强制 rubygems 使用你想要的版本(见这篇文章):
% bundle _1.0.22_ install
这是我必须做的才能让它与以前版本 (2.2.11) 的捆绑器一起安装:
gem install bundler:2.2.11
bundle _2.2.11_ install
错误消息
In Gemfile: bundler (~> 1.16)
有点不准确,因为版本号要求可以来自其他地方,例如.gemspec
文件,我就是这样:
spec.add_development_dependency "bundler", "~> 1.16"
从
.gemspec
文件中删除版本号为我解决了这个问题:
spec.add_development_dependency "bundler"
我在 macOS Mojave 上遇到了同样的问题。我安装了不同版本的 bundler gem 并卸载了当前版本。
gem install bundler -i '2.0.1'
gem uninstall bundler
然后让我选择要卸载的版本,然后我选择造成问题的版本。
如果您使用
rvm
来管理您的 ruby 版本,请考虑为项目使用 gemsets。这样你就可以安装所需的特定版本的捆绑器,而不必每次都指定版本。
您可以通过在您的项目目录中运行
gemset
来确认您的rvm info
已加载。
现在您可以通过
gem install bundler -v '~> <VERSION>'
安装您想要的捆绑器版本。下次您需要使用捆绑器时,只需运行bundle
.