【问题标题】:Rails: How can I remove default version of bundler?Rails:如何删除默认版本的捆绑程序?
【发布时间】:2019-08-01 10:06:33
【问题描述】:

我尝试更改默认捆绑包版本,但它已更新为 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)

【问题讨论】:

  • 尝试gem uninstall bundler --version 1.16.6,如果可行,请尝试安装您想要的版本。
  • 试过但得到错误 ERROR: While execution gem ... (Gem::InstallError) gem "bundler" 无法卸载,因为它是默认 gem
  • 你有哪个版本的 ruby​​?你在用 rvm 吗?
  • ruby --version ruby​​ 2.5.1p57(2018-03-29 修订版 63029)[x86_64-linux]
  • 因为这是用ruby-on-rails 标记的,请尝试在 Gemfile 中设置所需的版本。

标签: ruby-on-rails rubygems bundler


【解决方案1】:

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

$ 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)

【讨论】:

  • 试了这么多次, gem list bundler 和 gem info bundler 都说正确的版本,但是bundler --version 打印旧版本,并且 bundle install 仍然不起作用。把我的头发拉出来!
  • @animatedgif 请运行:bundler install
【解决方案2】:

对于那些使用 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

【讨论】:

  • 这是有史以来最好的答案!
  • 即使在再次gem install bundler 之后,bundle -v 仍然显示错误的版本。有什么建议吗?
  • 这对我有帮助
  • 我的仍然显示我刚刚删除的版本。然后当我去我的 xcode 项目并运行 bundle install 时 - 它给了我一个关于锁文件版本不匹配的警告
  • (1) 如果在运行bundle -v 时旧版本仍然存在,请尝试使用显式版本运行bundler _2.1.2_ install,它为我修复了它。 (2) 这也适用于 .asdf 的 ruby​​ 版本。 (3)我也仍然有锁定文件警告中提到的@cspam 问题,不确定解决它的“正确”方法是什么......
【解决方案3】:

gem update --system

这个命令对我有用

运行后试试这个gem list bundler

【讨论】:

  • 这实际上是在更新你所有的gem...这可能会导致依赖问题和其他冲突...
  • gem update --system 在 macOS Catalina 上总是失败,即使使用 sudo
【解决方案4】:

有问题的默认 .gemspec 的 rbenv 路径应如下所示。

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

【讨论】:

    【解决方案5】:

    我观察到,gem environment 命令输出中提供的 INSTALLATION DIRECTORY 路径中有时不存在默认 gem。

    我在安装了Ruby v2.7.0Alpine 操作系统中观察到了这个问题。

    在这种情况下,您可以使用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
    

    【讨论】:

      【解决方案6】:

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

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

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

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

      【讨论】:

        【解决方案7】:

        正如@theist 所指出的,在 Ruby 2.6 捆绑器成为默认 gem 之后。因此,根据您的 Ruby 版本,您将包含不同版本的捆绑程序。你可以看到列表here

        但到目前为止,答案中尚未解释的是,您可以通过编辑 Gemfile.lock 并在文件的最后一行指定要使用的版本来控制使用哪个版本的捆绑器说:

        BUNDLED WITH
           2.2.33
        

        这感觉完全倒退了,因为 Gemfile.lock 应该是由 bundler 自动生成的,但这就是目前的状态。

        所以,让我们用一个例子来解释一下。假设我使用的是 Ruby 3.0.3。这个版本的 Ruby 附带了 bundler 2.2.32。但是我的托管公司 Heroku 使用的是 bundler 2.2.33。由于我希望我的开发环境使用与生产环境相同的捆绑程序版本,因此我想使用 2.2.33。

        所以首先要做的是gem install bundler -v "2.2.33"。然后把Gemfile.lock的最底线改成是和2.2.33绑定的,比如:

        BUNDLED WITH
           2.2.33
        

        现在,当您运行 bundle install 时,它将使用捆绑程序 2.2.33

        【讨论】:

          【解决方案8】:

          使用一些捆绑器版本:您会得到:

          gem list bundler 
          # bundler (2.1.4, default: 1.17.3)
          
          • 您安装新版本的捆绑器,将其设置为默认值,您将获得多个默认捆绑器版本
          gem install --default bundler -v2.3.8
          # bundler (default: 2.3.8, 2.1.4, default: 1.17.3) 
          
          • 然后您可以重新安装不带 --default 参数的旧默认版本,因此它将作为非默认重新安装并且您可以将其卸载。
          gem install bundler -v1.17.3
          # bundler (default: 2.3.8, 2.1.4, 1.17.3)
          
          • 并卸载旧的默认版本
          gem uninstall bundler -v1.17.3
          # bundler (default: 2.3.8, 2.1.4)
          

          【讨论】:

            【解决方案9】:

            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)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-05-13
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多