当尝试运行捆绑安装或捆绑更新时,捆绑程序将永久挂起,并且无法完成其功能。它唯一会完成的时间是当我指定要更新的 gem 时。
例如:
bundle update
将永远挂起,除非我像这样使用它:
bundle update activerecord
然后就可以正常完成了。
如有任何帮助,我们将不胜感激。
此问题是由于缺少依赖项,或更糟糕的是依赖项的依赖项造成的。当您不使用 rubygems.org 作为 gemserver(企业环境)时,这种情况很常见。
创建一个新的宝石集,然后重新捆绑。这多次解决了问题。
如果由于生产原因而无法做到这一点,并且您没有应用程序历史记录来反映问题 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 索引已损坏
bundle update
确认空集工作bundle update
用
取消设置
ENV
var
取消设置DEBUG_RESOLVER
确保您的
GITHUB_TOKEN
中的凭据与您的 bundle config --global github.com <your token>
匹配
您也可以尝试使用
--verbose
标志来获得更多输出,但它确实过时且没有多大帮助。据我所知,做到这一点的唯一方法是:
对我来说,跑步后:
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 有问题,但不确定。
捆绑器可能未悬挂。我刚刚经历了 7 分钟的时间来捆绑一个相对较小的 Gemfile,而且是在具有 50 Gb 下载连接的最快 SSD Macbook Pro 上。
部署到 AWS 实例时,请确保您的安全组允许出站 HTTP 和/或 HTTPS 连接 - 我遇到此问题是因为我对安全组限制太多。