捆绑器:如何删除卸载的宝石



我正在尝试安装 pg_search gem。在第一次尝试中,我没有注意Ruby的必要版本(我们正在使用2.3.1并且需要2.4),在出现的错误消息中,我被要求运行bundle update,但它pg_search更新为需要ruby>= 2.52.3.5。即使我指定了旧版本的 gem,它仍然显示相同的消息:

Gem::InstallError: pg_search requires Ruby version >= 2.5.
An error occurred while installing pg_search (2.3.5), and Bundler cannot continue.
Make sure that `gem install pg_search -v '2.3.5'` succeeds before bundling.

我已经通过运行docker-compose run web gem install pg_search -v 2.1.4安装了 gem,并重新创建了容器。我的宝石文件:

source 'https://rubygems.org'
gem 'rails', '~> 5.2.0'
# Use sqlite3 as the database for Active Record
# Use Puma as the app server
#gem 'mina-puma', :require => false
gem 'puma', '~> 3.7.1'
gem 'pg', '~> 0.18'
gem 'pg_search', '~> 2.1', '>= 2.1.4'
...

捆绑器版本:bundler (>= 1.3.0)

我想知道如何删除pg_search2.3.5并安装2.1.4.

即使

我指定了旧版本的 gem

不,你没有。

您指定了'~> 2.1', '>= 2.1.4',这意味着任何2.1.4 <= version < 3.0.0

通过运行bundle update,这安装了满足您要求的最新可用版本,这显然是2.3.5,而不是2.1.4

如果还需要指定 ruby 版本2.3.1的约束,也可以将其放入Gemfile

ruby '2.3.1'

。然后运行bundle update在查找最新的兼容依赖项时也会考虑到这一点。


我想知道如何删除 2.3.5 pg_search并安装 2.1.4

您没有针对此 ruby 版本安装版本2.3.5,因为它不兼容。

显然您已经安装了版本2.1.4.

问题是您的Gemfile.lock仍然期待版本2.3.5.有几种方法可以解决此问题,但无论如何,您需要更新Gemfile.lock,以便与 ruby 版本具有一组兼容的依赖项。

最简单的方法可能是重新运行bundle update pg_search,但请确保您这次确实使用了正确的 ruby 版本。这应该会降级依赖项,因为较新的库版本与较旧的 ruby 版本不兼容。

如果您仍然遇到问题,您可以接受我的建议,将ruby约束添加到Gemfile,并还原您最近所做的任何其他更改,这些更改创建了这种不兼容的依赖项组合。