首次捆绑安装,堆栈级别太深

时间:2012-10-26 02:14:54

标签: ruby-on-rails gem stack bundle bundler

我使用该命令创建了一个全新的rails项目 rails new qbc --database=mysql。它可以完美地创建所有文件,但是 在捆绑安装它错误

$ bundle install
Fetching gem metadata from https://rubygems.org/...........
Fetching gem metadata from https://rubygems.org/..
Unfortunately, a fatal error has occurred. Please see the Bundler
troubleshooting documentation at http://bit.ly/bundler-issues. Thanks!
/usr/bin/bundle:23: stack level too deep (SystemStackError)

gist.github.com/3956513

我已经搜索并搜索了这个问题的解决方案,但我似乎无法做到 找到其他经历过它的人。我正在开发Cygwin和我 如果这与它有关,就不会感到惊讶。

我尝试使用源代码创建一个Gemfile,并在其中创建一个gem 目录和捆绑安装仍然提供相同的错误。我跟着全部 故障排除步骤,重新安装Cygwin和所有包,一切。什么 我的眼睛一直是Fetching gem metadata两次......是否有可能 bundler被某种循环所吸引?

3 个答案:

答案 0 :(得分:20)

Cygwin的pthread_attr_getstack默认报告大约90k。我认为Cygwin报告的是已提交(旧到目前为止)的堆栈大小,而不是保留(总可用)大小。然后Ruby将其(即90k)视为有史以来的最大堆栈大小。

更改初始已提交堆栈大小:

peflags -X409600 `which ruby`

注意大写的-X。小写-x更改保留的堆栈大小,而不是最初提交的堆栈空间。

这为我修复了所有Ruby + Rails + Cygwin问题。

我不太了解Ruby或Cygwin的内部结构,知道哪个是正确的解决方案,但它可能就是其中之一。

  • Cygwin从pthread_attr_getstack报告保留堆栈大小。
  • Ruby添加了一个构建步骤来运行上面的peflags命令。
  • Ruby以不同的方式确定可用的堆栈空间。

答案 1 :(得分:1)

不幸的是,我不认为这个答案可能会有所帮助,因为它没有任何意义,但我通过以下方式解决了这个问题:

$ gem install rake
$ gem install bundler

$ bundle install

此时它没有遇到同样的错误。

答案 2 :(得分:0)

Windows二进制文件在可执行文件头中编码首选堆栈大小。 Cygwin二进制文件默认为大约2M。

你可以改变这个:

peflags -x8192000 `which ruby`

并重新运行'bundle install'。一段时间以来,它一直在为我工作。