尝试运行bundle install或bundle update时,bundler将永久挂起,而不是完成其功能。它完成的唯一时间是指定要更新的gem。
例如:
bundle update
除非我像这样使用它,否则将永远挂起:
bundle update activerecord
然后它将正常完成。
任何帮助都将不胜感激。
答案 0 :(得分:22)
此问题是由于缺少依赖性,或者更糟糕的依赖依赖性。当您不使用rubygems.org作为gemserver(企业环境)时,这种情况很常见。
创建一个新的gemset,并重新捆绑。这可以多次解决问题。
如果由于制作原因而无法执行此操作,和您没有可以反映问题gem添加时间的应用历史记录,那么:
自从写完这个答案后学到了一点,我以为我会传递this excellent article以了解如何使用详细的调试输出运行bundler
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
答案 1 :(得分:6)
您也可以尝试使用--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有问题,但不确定。
答案 2 :(得分:2)
Bundler可能不会挂起。我刚刚经历了7分钟的时间来捆绑一个相对较小的Gemfile,这是最快的SSD Macbook Pro,下载连接为50 Gb。
答案 3 :(得分:1)
部署到AWS实例时,请确保您的安全组允许出站HTTP和/或HTTPS连接 - 我遇到了这个问题,因为我过度限制了安全组。