【问题标题】:Rake error: Stack level too deepRake 错误:堆栈级别太深
【发布时间】:2011-10-04 14:07:02
【问题描述】:

我知道这是一个常见问题,但我刚刚开始使用新的 Rails 3.1.0 和 Ruby 1.9.2 p290 进行项目

在我的第一次迁移中,我已经遇到了这个错误,我不知道为什么。

Aurelien$ rake db:migrate --trace
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/version.rb:4: warning: already initialized constant MAJOR
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/version.rb:5: warning: already initialized constant MINOR
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/version.rb:6: warning: already initialized constant BUILD
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/version.rb:3: warning: already initialized constant NUMBERS
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/version.rb:9: warning: already initialized constant VERSION
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake.rb:26: warning: already initialized constant RAKEVERSION
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/early_time.rb:17: warning: already initialized constant EARLY
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/alt_system.rb:32: warning: already initialized constant WINDOWS
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/application.rb:28: warning: already initialized constant DEFAULT_RAKEFILES
WARNING: Possible conflict with Rake extension: String#ext already exists
WARNING: Possible conflict with Rake extension: String#pathmap already exists
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/task_arguments.rb:73: warning: already initialized constant EMPTY_TASK_ARGS
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/invocation_chain.rb:49: warning: already initialized constant EMPTY
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/file_utils.rb:10: warning: already initialized constant RUBY
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/file_utils.rb:84: warning: already initialized constant LN_SUPPORTED
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/dsl_definition.rb:143: warning: already initialized constant Commands
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/file_list.rb:44: warning: already initialized constant ARRAY_METHODS
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/file_list.rb:47: warning: already initialized constant MUST_DEFINE
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/file_list.rb:51: warning: already initialized constant MUST_NOT_DEFINE
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/file_list.rb:55: warning: already initialized constant SPECIAL_RETURN
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/file_list.rb:61: warning: already initialized constant DELEGATING_METHODS
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/file_list.rb:364: warning: already initialized constant DEFAULT_IGNORE_PATTERNS
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/file_list.rb:370: warning: already initialized constant DEFAULT_IGNORE_PROCS
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake.rb:64: warning: already initialized constant FileList
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake.rb:65: warning: already initialized constant RakeFileUtils
** Invoke db:migrate (first_time)
** Invoke environment (first_time)
** Execute environment
rake aborted!
stack level too deep
/Users/Aurelien/.rvm/gems/ruby-1.9.2-p290@rails3/gems/rake-0.9.2/lib/rake/task.rb:162

我还删除了宝石并使用 db:reset 重新加载 来源“http://rubygems.org”

gem 'rails', '3.1.0'

# Bundle edge Rails instead:
# gem 'rails',     :git => 'git://github.com/rails/rails.git'

gem 'sqlite3'

#gem "rspec-rails", :group => [:test, :development]

group :test do
  #gem "factory_girl_rails"
  #gem "capybara"
  #gem "guard-rspec"
  #gem "spork", "> 0.9.0.rc"
  #gem "guard-spork"
end

rake 命令可用于bundle exec,但最好避免使用它。

提前感谢您的提示和回答。

欧瑞莲

【问题讨论】:

  • 捆绑的 rake 和系统 rake 之间有区别吗?我建议这就是问题所在。 rake --versionbundle exec rake --version。看起来它正在尝试再次要求 rake 库,并导致某种循环。
  • 谢谢 Matthew,但我得到了相同的版本:Aurelien-Schlumbergers-MacBook-Pro:tchinchine Aurelien$ rake --version rake, version 0.9.2 Aurelien-Schlumbergers-MacBook-Pro:tchinchine Aurelien$ bundle exec rake --version rake, version 0.9.2
  • hmm...如果您尝试创建一个新的 gemset,然后捆绑安装,然后再次尝试 rake,会怎样?是否有一些疯狂的宝石在全球范围内覆盖某些东西? rvm gemset create tchinchine && rvm gemset use tchinchine 否则,我想不出为什么 bundle exec rake 会不同于 rake
  • 查看类似的问题"RoR: Rake aborted" 并参考Yehuda Katz article 为什么一直使用bundle execrake
  • 谢谢马修和 mliebelt。我想我会继续使用 bundle exec,并按照 Katz 先生的说明进行操作。

标签: ruby ruby-on-rails-3 rake


【解决方案1】:

您应该在您的 Gemfile 中专门添加 Rake 版本 >= 0.9.2! 某些 Rails 3 版本存在一个错误,当您使用较旧的 Rake 版本时,您会看到类似这样的奇怪错误。

在您的 Gemfile 中:

gem 'rake' , '>= 0.9.2'

我还建议您专门为您的应用程序创建一个新的 gemset,例如

rvm gemset create yourproject
rvm gemset use yourproject

或:

rvm gemset use yourproject --default

对于新的 gemset,您可能需要手动添加“gem install rake”,然后运行“bundle install”

除了使用 Gemfile 之外,使用单独的 gemset 是保持项目中的 gem 版本稳定并与其他项目分离的最佳方法。

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 2011-11-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    相关资源
    最近更新 更多