Rails 3.0和Ruby 1.9.2rc:运行Rake命令时返回“already initialized constant”和“stack level too deep”错误。有什么想法吗?

25

我试图在Ubuntu 10.04上运行Rails 3 beta 4和Ruby 1.9.2rc。起初可以运行,但在第一次运行bundle install/package之后,在所有的Rails项目中都出现了以下错误。即使是一个基本的“rails new testproject”紧接着一个rake也会带来错误信息。

总之,我被难住了。非常感谢任何有关可能导致此问题的帮助。

我注意到的唯一事情-可能相关,也可能不相关-是~/.bundle文件夹中的目录是ruby/1.9.1。我的机器上没有安装1.9.1 - 只有1.9.2rc。ruby -v返回1.9.2

(in /home/john/Websites/sandbox/testerino)
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:32: warning: already initialized constant RAKEVERSION
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake/alt_system.rb:32: warning: already initialized constant WINDOWS
WARNING: Possible conflict with Rake extension: String#ext already exists
WARNING: Possible conflict with Rake extension: String#pathmap already exists
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:404: warning: already initialized constant EMPTY_TASK_ARGS
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:452: warning: already initialized constant EMPTY
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:960: warning: already initialized constant RUBY_EXT
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:964: warning: already initialized constant RUBY
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1033: warning: already initialized constant LN_SUPPORTED
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1242: warning: already initialized constant ARRAY_METHODS
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1245: warning: already initialized constant MUST_DEFINE
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1249: warning: already initialized constant MUST_NOT_DEFINE
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1253: warning: already initialized constant SPECIAL_RETURN
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1259: warning: already initialized constant DELEGATING_METHODS
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1569: warning: already initialized constant DEFAULT_IGNORE_PATTERNS
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1575: warning: already initialized constant DEFAULT_IGNORE_PROCS
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1612: warning: already initialized constant FileList
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1638: warning: already initialized constant EARLY
/home/john/.bundle/ruby/1.9.1/gems/rake-0.8.7/lib/rake.rb:1968: warning: already initialized constant DEFAULT_RAKEFILES
rake aborted!
stack level too deep

发生在所有项目中,包括裸机安装。 - PlankTon
13个回答

31

我也遇到了这个问题。与您提到的特定版本的Rails或Ruby不相关,这些版本与我使用的版本不同(Rails 2.3.8,Rake 0.8.7,Ruby 1.9.1p378)。似乎与Bundler和Rake不良互动有关。

对我有效的解决方法在此lighthouse ticket底部提到。以下是简短的版本:

  • 运行“bundle exec bash”;查看rake现在是否工作 - 如果工作,请
  • 确保bash环境在之前和之后是相同的,通过咨询env命令并相应地修改~/.bashrc或~/.bash_profile。

这样做后,您会使Bundler出现一些问题。此时,您必须清除RUBYOPT才能运行bundle命令:

RUBYOPT= bundle install --relock

编辑:

仔细考虑了一下,我不确定这是否是解决这个特定问题的最佳方法。在采用这种方法之前,你可以尝试使用Hiral Desai的提示和其他答案,因为这种方法会改变环境。


1
我在我的Rails应用程序中执行任何rake任务时遇到了类似的问题。运行bundle exec bash后问题消失了,但是如果我在终端中打开一个新标签页,我必须重新运行bundle exec bash - ravinggenius

24

恐怕更简单的解决方案是运行这个命令而不是rake db:migrate

bundle exec rake db:migrate

是的 - 这可能会更好,因为您的环境没有被修改。 - Eric Walker
1
这是我的一个朋友Pratik Naik(http://stackoverflow.com/users/639946/pratik-naik),他也是Rails核心团队的成员,建议我这样做。请不要因此-1我的帖子,我只是在传播知识。 :) - Hiral Desai

4
根据Eric W.之前的消息,RUBYOPT环境变量已设置。 如果您想退出通过"bundle exec bash"打开的新bash shell,则只需复制RUBYOPT环境行,退出shell,然后输入"export RUBYOPT='从先前环境中复制的参数'"。
注意:此方法适用于ruby 1.9.2p180(2011-02-18修订版30909)[x86_64-darwin10.7.0]、Rails 3.0.7、gem 1.8.0和Rake 0.8.7。

对我来说完美地工作了!谢谢! - Pascal Lindelauf

4

bundle exec bash 对我有效


3
我通过将rubygem安装版本从1.8.10降级到1.7.2成功解决了这个问题。
gem update --system 1.7.2

如果您使用rvm:rvm install rubygems 1.7.2 - Liron Yahdav

1

看起来像是奇怪的递归require

你尝试卸载所有版本的 rake 并重新安装了吗?在1.9.2rc 影响 gem 加载 中有一个 bug,所以可能是这个问题?我没有仔细研究它,因为许多人已经密切关注它...

注意:1.9.1是 API 版本,所以是正确的。


0

在更新rubygem(1.8.10)和bundler(1.0.18)后,我也遇到了这个问题

我通过更新rake到0.9.2解决了这个问题


0
这可能发生在您的代码库的rvm gemset和全局gemset中都安装了rake gem时。

0

我在根目录下有一个名为.bundler的文件夹,它导致了冲突。删除它后问题得到解决。

rm -rf ~/.bundler

0
如果您已经安装了RVM,那么一旦您将rubygems更新到1.8.15,就可能出现这个问题。问题在于我在全局gemset和项目的gemset中都安装了rake。解决方案是只安装一个版本的rake。要从项目的gemset中删除它,请执行以下步骤: 1. 进入项目目录 2. 运行命令 gem uninstall rake

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