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

时间:2012-02-27 15:39:40

标签: ruby rubygems bundler

尝试运行bundle install或bundle update时,bundler将永久挂起,而不是完成其功能。它完成的唯一时间是指定要更新的gem。

例如:

bundle update

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

bundle update activerecord

然后它将正常完成。

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:22)

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

常见模式:

  • 您没有安装该gem
  • 您没有安装该gem的依赖项
  • 您没有安装没有依赖项的gem

最简单的技术

创建一个新的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 installbundle update


调试您的私人Gemserver技术

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

  1. 评论所有宝石
  2. 运行bundle update以确认空集正常工作
  3. 取消评论一个宝石和bundle update
  4. GOTO 3直到遇到问题
  5. 研究其依赖性

  6. 完成后

    使用

    取消设置ENV var
      

    取消设置DEBUG_RESOLVER

答案 1 :(得分:6)

您也可以尝试使用--verbose标志来获得更多输出,但它确实过时且不太有用。从我能看到的真正唯一的方法是:

  1. 一次取消注释一个宝石,直到它停止工作,然后试着弄清楚到底是什么。
  2. 一次删除版本强制执行一个gem(如果有)以查看是否修复了它。
  3. 如果可以(使用不同的宝石)或锁定有效的版本,请删除有问题的宝石。
  4. 对我来说,跑完后:

    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连接 - 我遇到了这个问题,因为我过度限制了安全组。