Bundler 在尝试更新或安装时将永远挂起

问题描述 投票:0回答:4

当尝试运行捆绑安装或捆绑更新时,捆绑程序将永久挂起,并且无法完成其功能。它唯一会完成的时间是当我指定要更新的 gem 时。

例如:

bundle update

将永远挂起,除非我像这样使用它:

bundle update activerecord

然后就可以正常完成了。

如有任何帮助,我们将不胜感激。

ruby rubygems bundler
4个回答
32
投票

此问题是由于缺少依赖项,或更糟糕的是依赖项的依赖项造成的。当您不使用 rubygems.org 作为 gemserver(企业环境)时,这种情况很常见。

常见模式:

  • 您没有安装该 gem
  • 您没有安装该 gem 的依赖项
  • 如果没有依赖项,你就没有安装该 gem
  • 运行脚本的用户帐户没有安装该 gem 的权限

最简单的技术

创建一个新的宝石集,然后重新捆绑。这多次解决了问题。

如果由于生产原因而无法做到这一点,并且您没有应用程序历史记录来反映问题 gem 的添加时间,那么:


更简单的技术

自从写了这个答案以来,我学到了一些东西,我想我会传递这篇优秀的文章,了解如何使用详细的调试输出运行捆绑器

export DEBUG_RESOLVER=1
bundle  2> debug_output.txt 1> stdio.txt &

这会将所有调试(错误)输出转储到

debug_output.txt
,并将正常屏幕内容转储到
stdio.txt

您还需要转储

1>
,因为每次捆绑程序将一行转储到
2
(stderr)时,它都会将一个crlf放入
1
中。因此,要么转储
1
,要么将作业置于后台。我同时执行这两项操作,这样我就可以在同一个终端中工作。

我通常会跟进:

tail stdio.txt 

确定事情已经开始,然后:

tail -n 10000 -f debug_output.txt 

使用

/FAIL]
在文件中搜索安装依赖项失败的尝试。找到几个相同的,你就基本上找到了罪魁祸首。
stderr
适用于
bundle install
bundle update


调试您的私人 Gemserver 技术

我需要使用这种消除过程方法来确定我的(企业)gemserver 索引已损坏

  1. 注释掉所有宝石
  2. 运行
    bundle update
    确认空集工作
  3. 取消评论一颗宝石并
    bundle update
  4. 转到 3,直到遇到问题
  5. 研究其依赖关系

当你完成后

 取消设置 
ENV

var

取消设置DEBUG_RESOLVER


权限解决方案

确保您的

GITHUB_TOKEN
中的凭据与您的
bundle config --global github.com <your token>

匹配

8
投票

您也可以尝试使用

--verbose
标志来获得更多输出,但它确实过时且没有多大帮助。据我所知,做到这一点的唯一方法是:

  1. 一次取消一颗宝石的注释,直到它停止工作,然后尝试弄清楚到底发生了什么。
  2. 一次删除一个 gem 的版本强制(如果有),看看是否可以解决问题。
  3. 如果可以的话,删除有问题的 gem(使用不同的 gem)或锁定有效的版本。

对我来说,跑步后:

sudo bundle update --verbose

它一直挂在这里:

Query Gemcutter Dependency Endpoint API: tenderlove-frex
Fetching from: http://rubygems.org/api/v1/dependencies?gems=tenderlove-frex
HTTP Success
Query List: []

一点帮助都没有。我最终发现冲突发生在两颗宝石之间。以下内容将永远挂起:

source 'http://rubygems.org'
gem 'rails', '~> 3'
gem 'airbrake'

我删除了rails版本:

source 'http://rubygems.org'
gem 'rails'
gem 'airbrake'

然后它起作用了,但我在 Gemfile.lock 中注意到它使用的是 Rails 2.3.X。所以airbrake 似乎依赖于Rails 2,但我想要3。我找不到airbrake 具有Rails 2.x 依赖关系的任何地方,所以不确定为什么它最终会这样。为什么捆绑器不能输出更有意义的东西超出了我的范围。

这确实有效:

source 'http://rubygems.org'
gem 'rails', '~> 3'
gem 'airbrake', '~> 3'

我确实认为 Bundler 有问题,但不确定。


3
投票

捆绑器可能未悬挂。我刚刚经历了 7 分钟的时间来捆绑一个相对较小的 Gemfile,而且是在具有 50 Gb 下载连接的最快 SSD Macbook Pro 上。


1
投票

部署到 AWS 实例时,请确保您的安全组允许出站 HTTP 和/或 HTTPS 连接 - 我遇到此问题是因为我对安全组限制太多。

© www.soinside.com 2019 - 2024. All rights reserved.