被中止!栈层级太深。

13

可能是重复问题:
Rails 3.0&Ruby 1.9.2rc:Rake命令返回“already initialized constant”和“stack level too deep”错误。有任何想法吗?

我在Windows Vista上使用Ruby版本1.9.1。当我使用任何rake命令时,都会出现rake中止错误。这并不是在所有我的应用程序文件夹中都发生。它只在特定的应用程序文件夹中发生。

C:\rails_project\stunetwork>rake db:reset
(in C:/rails_project/stunetwork)
rake aborted!
stack level too deep
C:/Ruby191/lib/ruby/gems/1.9.1/gems/rake-0.8.7/lib/rake.rb:2383:in `raw_load_rak
efile'
(See full trace by running task with --trace)

2
你能用 --trace 参数执行相同的命令吗? - shingara
6个回答

21
尝试在rake命令前加上“bundle exec”。
bundle exec rake -T

不确定-T是什么意思,但这对我有用。$ bundle exec rake db:migrate - Kiran
-T 命令会列出所有可能的 Rake 命令。 - dewil_de
我是Ruby on Rails的新手,但我知道在我的情况下Bundler也被安装了...请查看Bundler获取更多信息。 - dewil_de
1
我该如何永久性地修复它?这样我就不必再输入 bundle exec 了。 - john2x
FYI,从-T中完整的rake列表如下:rake about rake assets:clean rake assets:precompile rake db:create rake db:drop rake db:fixtures:load rake db:migrate rake db:migrate:status rake db:rollback rake db:schema:dump rake db:schema:load rake db:seed rake db:setup rake db:structure:dump rake db:version rake doc:app rake log:clear rake middleware rake notes rake notes:custom rake rails:template rake rails:update rake routes rake secret rake stats rake test rake test:recent rake test:single rake test:uncommitted rake time:zones:all rake tmp:clear rake tmp:create - Michael Durrant
尝试使用bundle rake db:reset命令,但出现了以下错误:找不到命令"rake"。 - 2myCharlie

3
你需要更新你的宝石(gem)。 我使用1.8.10版本时遇到了这个错误,通过升级到1.8.16版本来解决。 gem update --system

这是一个错误,已经通过 https://github.com/rubygems/rubygems/commit/7d43f1418a048bac277344df962aafd00797230b 得到修复 - 可在1.8.16版本中使用。 - mpapis
尝试过了,得到的结果是:最新版本已经安装。完成。 - 2myCharlie

2

我只在使用rvm安装的ruby-1.9.2-p180版本中遇到了这个问题。

切换到ruby-1.9.2-p0版本可以解决这个问题。 可以尝试使用命令"rvm use 1.9.2-p0"。


我尝试了这个解决方案,但对我没有用。你知道其他的想法吗? - YogiZoli
它没有起作用,因为它与之无关,这个 bug 在 rubygems 1.8.16 中已经修复。 - mpapis

0

我在Ubuntu上遇到了这个确切的错误信息,并且通过将rubygems从1.8.3降级到1.7.1来解决了它。


1
由于Rubygems 1.7.1是在2011年4月1日发布的,而这个问题是在2010年8月11日提出的,因此即使错误消息相似,问题可能已经不同了。 - Andrew Grimm
5
@Andrew 是的,很有可能。然而,由于这个解决方案花了我一些时间来想出并解决了我的问题,所以我认为把它发布在这里是一个好主意,即使冒着让2010年的人感到困惑的风险。 - Tobias Cohen
我也遇到了这个问题。看起来1.8.10版本与rake 0.8.7不兼容。 - B Seven
这个错误已经在RubyGems 1.8.16中修复了,只需更新到最新版本即可。 - mpapis

0

调用堆栈可能取决于您安装的宝石(某些宝石会monkeypatch rails任务),这就解释了为什么您会在特定应用程序上遇到此问题而在其他应用程序上没有。

在unix系统中,您可以尝试使用ulimit命令来增加堆栈大小。在Windows方面,我还没有找到解决方案。

根据您在Windows上使用的ruby版本,您可能需要询问维护者如何增加堆栈。

对于ruby installer,您需要安装mingw编译环境,克隆github存储库并重新编译您使用的ruby(我承认这不是非常好看)。


我喜欢这个,谢谢!不幸的是还不够。我设置了: "ulimit -s unlimited",然后检查了 "ulimit -a",栈已经无限制了。它仍然显示相同的 "堆栈太深" 错误。可能的原因是什么? - YogiZoli

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接