14

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

$捆绑安装
从 https://rubygems.org/ 获取 gem 元数据............
从 https://rubygems.org/.. 获取 gem 元数据
不幸的是,发生了致命错误。请参阅捆绑器
http://bit.ly/bundler-issues 上的故障排除文档。谢谢!
/usr/bin/bundle:23: 堆栈级别太深 (SystemStackError)

gist.github.com/3956513

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

我尝试在一个空目录中创建一个仅包含源和一个 gem 的 Gemfile,并且 bundle install 仍然给出相同的错误。我遵循了所有的故障排除步骤,重新安装了 Cygwin 和所有软件包,一切。一直吸引我眼球的是Fetching gem metadata两次......捆绑器是否有可能陷入某种循环?

4

3 回答 3

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 以不同的方式确定可用堆栈空间。
于 2013-02-09T19:11:22.097 回答
1

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

$ gem install rake
$ gem install bundler

$ bundle install

它在那个时候工作而没有遇到同样的错误。

于 2013-01-24T03:13:40.923 回答
0

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

你可以改变这个:

peflags -x8192000 `which ruby`

并重新运行“捆绑安装”。一段时间以来,它一直以这种方式为我工作。

于 2013-01-04T04:18:54.530 回答