如何删除捆绑器的默认版本?

时间:2019-08-01 10:06:33

标签: ruby-on-rails rubygems bundler

我尝试更改默认捆绑软件版本,但它已更新为2个默认版本。如何修改为单个默认值?

$ gem list bundler

*** LOCAL GEMS ***

bundler (2.0.1, default: 1.16.6, default: 1.16.2)

如果我卸载gem不会删除默认值,

$ gem uninstall bundler
Successfully uninstalled bundler-2.0.1


$ gem list bundle

*** LOCAL GEMS ***

bundler (default: 1.16.6, default: 1.16.2)

如何设置(如以下所示)默认为单一版本?

bundler (2.0.1, default: 1.16.6)

7 个答案:

答案 0 :(得分:18)

我遇到了同样的问题,但是版本更新了

$ gem list bundler

*** LOCAL GEMS ***

bundler (default: 2.1.4, default: 2.1.2)

但是在遵循了这篇帖子的指示Two default versions of rake installed - how to delete one之后,我允许我删除了一个帖子。


您必须删除与要删除的默认gem对应的 .gemspec 文件。

因此,首先找到这些文件的位置。

# I'm running RVM to manage my Ruby versions

~/.rvm/rubies/ruby-2.7.0/lib/ruby/gems/2.7.0/specifications/default/

-rw-r--r--   1 myuser  staff  10731 Dec 26 17:22 bundler-2.1.2.gemspec
-rw-r--r--   1 myuser  staff  15134 Jan  7 17:30 bundler-2.1.4.gemspec

删除不需要的内容。

$ rm ~/.rvm/rubies/ruby-2.7.0/lib/ruby/gems/2.7.0/specifications/default/bundler-2.1.2.gemspec

然后安装(或重新安装)要设置为默认的gem。

$ gem install bundler:2.1.4 --default

Successfully installed bundler-2.1.4 as a default gem

最后,您将仅安装所需的版本。

$ gem list bundler

*** LOCAL GEMS ***

bundler (default: 2.1.4)

答案 1 :(得分:5)

对于那些使用rbenv的人,不小心说您有两个默认版本

$ gem list | grep bundler
bundler (default: 2.1.4, default: 1.17.2)

检查您的gem安装路径

$ gem environment
RubyGems Environment:
.
.
- INSTALLATION DIRECTORY: /home/yohanes/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0
.

转到specifications/default目录并查找捆绑包gemspec

$ cd /home/yohanes/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/specifications/default
$ ls -lah
total 200K
drwxr-xr-x 2 yohanes yohanes 4,0K Jun  1 10:05 .
drwxr-xr-x 3 yohanes yohanes  20K Jun  1 10:05 ..
.
.
-rw-r--r-- 1 yohanes yohanes  16K Jun  1 10:05 bundler-1.17.2.gemspec
-rw-r--r-- 1 yohanes yohanes  15K Jun  1 09:31 bundler-2.1.4.gemspec
.
.

删除您需要删除的版本

$ rm bundler-2.1.4.gemspec

再次检查

$ gem list | grep bundler
bundler (default: 1.17.2)
$ gem list bundler

*** LOCAL GEMS ***

bundler (default: 1.17.2)

但是,如果您检查捆绑软件版本,则仍将删除的版本作为默认版本

$ bundler -v
Bundler version 2.1.4

因此,我们必须通过重新安装所需的捆绑器版本来覆盖它

$ gem install bundler --version '1.17.2'
Successfully installed bundler-1.17.2
Parsing documentation for bundler-1.17.2
Done installing documentation for bundler after 1 seconds
1 gem installed

然后,如果再次检查,它将显示所需的版本

$ bundle -v
Bundler version 1.17.2

答案 2 :(得分:4)

gem update --system

此命令对我有用

运行后,尝试使用此gem list bundler

答案 3 :(得分:1)

违规的默认.gemspec的rbenv路径应如下所示。

/Users/yourusername/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/specifications/default/bundler-2.1.2.gemspec

答案 4 :(得分:0)

TLDR:卸载 ruby​​,然后重新安装。

详情:

对于使用 rbenv 的其他人已经用尽了其他想法,以下对我有用:

  • 退出您的项目目录(例如 cd /tmp
  • 卸载 ruby​​(例如 rbenv uninstall 2.6.6
  • 重新安装 ruby​​(例如 rbenv install 2.6.6
  • 返回到您的项目目录 (cd -)
  • 安装您想要的 RubyGems(例如 gem install bundler:2.1.4

在您的项目目录中,您将看到如下内容:

-bash> gem list | grep bundle
bundler (2.1.4, default: 1.17.2)

在您的项目目录外(例如 cd /tmp),您将看到如下内容:

-bash> gem list | grep bundle
bundler (default: 1.17.2)

答案 5 :(得分:0)

参加聚会迟到了,但也许我的发现可能对某人有所帮助:

在 Ruby 2.6 bundler 成为默认 gem 之后,这意味着 for each ruby version there's a default bundler,并且 bundler gem 带有一个可执行的 bundle 命令。

您无法删除此 gem,更新默认 gem 的唯一方法是使用 gem update --system [<version>] 更新 RubyGems 系统

我在删除安装路径中的文件以强制使用默认 gem 时遇到了很多问题,我不推荐但 YMMV。为了让 ruby​​ 2.6.x 具有 2.x 默认和工作捆绑器,我必须从干净的 ruby​​ 安装开始,并将 Rubygems 更新到项目所需的捆绑器版本。

答案 6 :(得分:0)

我发现有时在 INSTALLATION DIRECTORY 命令的输出中提供的 gem environment 路径中不存在默认 gem。

我在安装了 AlpineRuby v2.7.0 操作系统中发现了这个问题。

在这种情况下,您可以使用 gem list -d <GEM_NAME> -v <VERSION> 命令获取默认安装 gem 的位置。

/ # gem list -d rexml -v 3.2.3

*** LOCAL GEMS ***

rexml (3.2.3)
    Author: Kouhei Sutou
    Homepage: https://github.com/ruby/rexml
    License: BSD-2-Clause
    Installed at (default): /usr/lib/ruby/gems/2.7.0

    An XML toolkit for Ruby

要删除默认版本,您可以使用上面输出中显示的 /usr/lib/ruby/gems/2.7.0。删除命令将是:

rm -rf <INSTALLED_AT_PATH>/specifications/default/<GEM_NAME>-<VERSION>.gemspec

例如:

rm -rf /usr/lib/ruby/gems/2.7.0/specifications/default/rexml-3.2.3.gemspec