Rake找不到

11

嘿,我尝试使用bundler和一些gems玩耍,现在我无法再使用rake了。

如果我执行简单的db:migrate命令,就会出现以下错误:

mac:app antpaw$ rake db:migrate
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:335:in `bin_path': can't find executable rake for rake-0.8.7 (Gem::Exception)
 from <internal:gem_prelude>:282:in `method_missing'
 from /usr/local/bin/rake:19:in `<main>'

如果我执行gem list,rake会被列出。我使用Rails 3.0.0beta4、Bundler 1.0.0.beta.5和Ruby 1.9.2dev。

编辑我的export已发布。

mac:trickpipe antpaw$ export
declare -x Apple_PubSub_Socket_Render="/tmp/launch-2GMaKT/Render"
declare -x COMMAND_MODE="unix2003"
declare -x DISPLAY="/tmp/launch-5RguhF/:0"
declare -x HOME="/Users/antpaw"
declare -x LC_CTYPE="UTF-8"
declare -x LOGNAME="antpaw"
declare -x OLDPWD="/Users/antpaw"
declare -x PATH="/usr/local/bin:/usr/local/sbin:/usr/local/mysql/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/X11/bin"
declare -x PWD="/Volumes/Work HD/localhost/trickpipe"
declare -x SHELL="/bin/bash"
declare -x SHLVL="1"
declare -x SSH_AUTH_SOCK="/tmp/launch-N13Ivn/Listeners"
declare -x TERM="xterm-color"
declare -x TERM_PROGRAM="Apple_Terminal"
declare -x TERM_PROGRAM_VERSION="272"
declare -x TMPDIR="/var/folders/-K/-Kf7svFPHrKmLqMXKAGLuU+++TI/-Tmp-/"
declare -x USER="antpaw"
declare -x __CF_USER_TEXT_ENCODING="0x1F5:0:0"
mac:trickpipe antpaw$ which ruby
/usr/local/bin/ruby
mac:trickpipe antpaw$ ruby -v
ruby 1.9.2dev (2010-07-02 revision 28524) [x86_64-darwin10.2.0]

好的,我试过了,看看错误信息如何改变:

mac:trickpipe antpaw$ export GEM_HOME="/usr/local/lib/ruby/gems"
mac:trickpipe antpaw$ rake about
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:335:in `bin_path': can't find executable rake for rake-0.8.7 (Gem::Exception)
    from <internal:gem_prelude>:282:in `method_missing'
    from /usr/local/bin/rake:19:in `<main>'
mac:trickpipe antpaw$ export GEM_PATH="/usr/local/lib/ruby/gems"
mac:trickpipe antpaw$ rake about
/usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:779:in `report_activate_error': Could not find RubyGem rake (>= 0) (Gem::LoadError)
    from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:214:in `activate'
    from /usr/local/lib/ruby/site_ruby/1.9.1/rubygems.rb:1082:in `gem'
    from <internal:gem_prelude>:213:in `push_gem_version_on_load_path'
    from <internal:gem_prelude>:16:in `gem'
    from /usr/local/bin/rake:18:in `<main>'
mac:trickpipe antpaw$ 

现在使用rvm:

mac:trickpipe antpaw$ rake about
(in /Volumes/Work HD/localhost/rails_app)
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:30: warning: already initialized constant RAKEVERSION
WARNING: Possible conflict with Rake extension: String#ext already exists
WARNING: Possible conflict with Rake extension: String#pathmap already exists
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:402: warning: already initialized constant EMPTY_TASK_ARGS
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:450: warning: already initialized constant EMPTY
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:958: warning: already initialized constant RUBY_EXT
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:962: warning: already initialized constant RUBY
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:1031: warning: already initialized constant LN_SUPPORTED
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:1240: warning: already initialized constant ARRAY_METHODS
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:1243: warning: already initialized constant MUST_DEFINE
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:1247: warning: already initialized constant MUST_NOT_DEFINE
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:1251: warning: already initialized constant SPECIAL_RETURN
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:1257: warning: already initialized constant DELEGATING_METHODS
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:1561: warning: already initialized constant DEFAULT_IGNORE_PATTERNS
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:1567: warning: already initialized constant DEFAULT_IGNORE_PROCS
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:1604: warning: already initialized constant FileList
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:1630: warning: already initialized constant EARLY
/Users/antpaw/.rvm/rubies/ruby-1.9.2-rc2/lib/ruby/1.9.1/rake.rb:1960: warning: already initialized constant DEFAULT_RAKEFILES
DEPRECATION WARNING: Calling a method in Rails::Application is deprecated, please call it directly in your application constant Trickpipe::Application. (called from method_missing at /Users/antpaw/.rvm/gems/ruby-1.9.2-rc2/bundler/gems/rails-edb5401/railties/lib/rails/application.rb:77)
rake aborted!
stack level too deep

(See full trace by running task with --trace)

我在 Rails 3 和 Ruby 1.9 中看到过类似的情况。似乎发生的是 /usr/local/bin/rake 调用了一些代码,最终尝试链接到不同的环境。 - Eric Walker
尝试卸载并重新安装? - ehsanul
@ehsanul:当然,但这并没有帮助。 - antpaw
几乎了。我认为我们取得了一些进展,现在我们在rubygems.rb: 779这行了,而不是以前的rubygems.rb: 335。 - antpaw
好的最新更新:我按照你建议安装了RVM(确实非常好用),但是请看上面我的日志,rake仍然存在一些问题:( - antpaw
显示剩余3条评论
4个回答

12

如果您使用macports安装了Ruby 1.9.2,我提醒一下,我遇到了以下问题:

/opt/local/lib/ruby1.9/1.9.1/rubygems.rb:340:in `bin_path': can't find executable rake for rake-0.8.7 (Gem::Exception)
from /opt/local/bin/rake:19:in `<main>'

解决方法是进入/opt/local/lib/ruby1.9/gems/1.9.1/specifications并删除"rake.gemspec"文件。就这样...找了好久,但终于成功了。

顺便说一下,我在Windows 7上也遇到了同样的问题。在那种情况下,“删除rake.gemspec”解决方案对我也起作用了。 - Laran Evans
1
在Win7上对我也起作用了。这是Rake的一个bug吗?如果是,有人看到过相关的票据吗?虽然是个小问题,但解决起来很麻烦。谢谢大家。 - Mridang Agarwalla
1
这对我也起作用了,通过Homebrew在MacOS 10.6.5上。当然,要做的是:rm /usr/local/Cellar/ruby/1.9.2-p136/lib/ruby/gems/1.9.1/specifications/rake.gemspec不过。 - Mike Pountney
@mike 我也是。看起来这是RubyGems应用程序的设计缺陷,但我们1.9.2用户无法升级到1.4,因为新版本会吃掉我们未出世的孩子、偷走我们的信用卡并踢我们的狗...我可能有点夸张...但只是一点点。 - Mike Bethany
奇怪的是,将文件重命名为“_rake.gemspec”不起作用,但将其重命名为“rake.gemspec_”却可以。 - Kenny Evitt

6
我很确定您没有正确设置路径环境。 /usr/local/lib/ruby/site_ruby/1.9.1/ 是Mac OS X预装的Ruby解释器的默认包文件夹,但是当您说您(假设)使用Ruby 1.9.2dev时,这个路径是错误的。请在shell中删除export并发布结果。此外,请发布您安装/路径的Ruby 1.9.2dev和绑定文件夹。
编辑1:
好的,快速修复您的问题:export GEM_HOME="/path/where/your/gems/reside",可选export GEM_PATH="/path/where/your/gems/reside"和可选export PATH="/path/where/your/gems/reside:$PATH"。只按此顺序执行!如果其中一个不起作用,请继续下一个导出。
请注意,这应该解决您的问题,但要使Bundler环境与Rails等工作,您必须更改Rails应用程序的配置,以显式使用您的自定义Bundler gem环境。我读过一些时间前Rails3将包括针对此选项的命令;如果是这种情况(我不知道Rails3),请检查这些命令。
附言:放置Bundler并改用RVM。它更强大,更成熟,并允许更多的灵活性(特别是在处理与gemsets结合使用的多个解释器时)。

你看不到它,因为它是系统范围内的默认设置。 - petabyte

2

我遇到了与RVM相同的问题("warning: already initialized constant RAKEVERSION")等等。

我正在使用一个Gemset("rails")进行开发,但是我注意到我的BUNDLE_PATH没有指向这个gemset (.rvm/gems/ruby-1.9.2-p0@rails); 而是指向全局的那个(.rvm/gems/ruby-1.9.2-p0).

我将BUNDLE_PATH修复为使用rails Gemset,现在rake正常工作。希望这能有所帮助。



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