运行rake db:create:all时出现“堆栈级别太深”的错误提示

11

当我运行 rake db:create:all 命令时,我收到以下信息:

/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/version.rb:4: warning: already initialized constant MAJOR
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/version.rb:5: warning: already initialized constant MINOR
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/version.rb:6: warning: already initialized constant BUILD
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/version.rb:3: warning: already initialized constant NUMBERS
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/version.rb:9: warning: already initialized constant VERSION
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake.rb:26: warning: already initialized constant RAKEVERSION
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/early_time.rb:17: warning: already initialized constant EARLY
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/alt_system.rb:32: warning: already initialized constant WINDOWS
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/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/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/task_arguments.rb:73: warning: already initialized constant EMPTY_TASK_ARGS
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/invocation_chain.rb:49: warning: already initialized constant EMPTY
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_utils.rb:10: warning: already initialized constant RUBY
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_utils.rb:84: warning: already initialized constant LN_SUPPORTED
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/dsl_definition.rb:143: warning: already initialized constant Commands
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_list.rb:44: warning: already initialized constant ARRAY_METHODS
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_list.rb:47: warning: already initialized constant MUST_DEFINE
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_list.rb:51: warning: already initialized constant MUST_NOT_DEFINE
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_list.rb:55: warning: already initialized constant SPECIAL_RETURN
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_list.rb:61: warning: already initialized constant DELEGATING_METHODS
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_list.rb:364: warning: already initialized constant DEFAULT_IGNORE_PATTERNS
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake/file_list.rb:370: warning: already initialized constant DEFAULT_IGNORE_PROCS
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake.rb:64: warning: already initialized constant FileList
/Users/junior/.rvm/gems/ruby-1.9.2-p290@global/gems/rake-0.9.2/lib/rake.rb:65: warning: already initialized constant RakeFileUtils
rake aborted!
stack level too deep

数据库没有被创建。有人能帮我吗?

4个回答

25

我在互联网上找到了一个提示,可以避免这个错误。请参见链接:"Rail 3.1 and Rake aborted"。没有给出具体原因,但使用bundle exec rake代替纯rake调用似乎解决了问题。看起来rake的调用正在递归地调用自己,而没有注意到文件已经被加载。

因此,请尝试并告诉我们是否有效。


1
是的,rake问题的常见来源是忘记通过bundle exec调用它。对于那些经常忘记事情的人来说,调用bundle exec bash会有所帮助。 - Arsen7
这很有帮助。在从10.4.2升级后,我只在rake 12.3.0中得到了这个,但是与rake <task>相比,用bundle exec rake <task>前置不再抛出警告。 - octoquad

19

如果和我一样,你太懒了不想每次都使用bundle

想看一个魔术?试着运行gem uninstall rake。当被询问到是否存在损坏依赖项时,请确认卸载操作。有点违反直觉的,我知道。

现在可以直接运行rake命令而无需使用bundle exec。神奇!

虽然我不知道它是如何实现的,但我认为这与本地/全局gem集有关;现在应该使用的是rvm全局rake。

并非好习惯,但就像我说的,这是为了懒惰而存在的。


1
这对我有用,我想知道是否与安装了旧版本的Rails有关。 - Denny Ferrassoli
只是想补充一下,我在使用Rails 3.1.1时,在一台笔记本电脑上也遇到了同样的问题,而且我之前还安装了一个较旧版本的Rails。@jonallard的提示解决了这个问题。 - microspino
在重启终端后,这对我有用。 :) - talyric
1
我想知道在这个修复之前和之后,“which rake”会产生什么结果。 - Perry Horwich
当我卸载时,我得到了这个信息丰富的输出,非常酷:$ gem uninstall rake ERROR: While executing gem ... (Gem::InstallError) rake is not installed in GEM_HOME, try: gem uninstall -i /Users/jon/.rvm/gems/ruby-2.1.5@global rake按照建议,我卸载了全局的rake,然后本地的rake就可以正常工作了,没有错误。 - Jon Kern
@JonKern 我也遇到了这个错误,可能是 Ruby/Rake 版本过新所致。 - PandaWood

3

我找到了另一种方法,不必每次都运行 bundle exec。 对于我个人而言,在使用Sinatra时(而非Rails),将 gem 'rake' 添加到我的Gemfile中非常有效。 :)


0

命令gem uninstall rake告诉我我安装了多个rake gem,在删除其中两个后,我不再需要使用bundle exec了!


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