Ruby 为什么这需要从rake失败,但在显式运行时成功?

Ruby 为什么这需要从rake失败,但在显式运行时成功?,ruby,rake,Ruby,Rake,帮助我理解为什么这个项目的测试在直接执行时运行,而在通过rake运行时不运行。通过Rake TestTask运行时出错: ** Execute test /home/myockey/.rvm/rubies/ruby-1.9.2-p136/bin/ruby -I"lib:test" "/home/myockey/.rvm/gems/ruby-1.9.2-p136/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/unit/data_test.r

帮助我理解为什么这个项目的测试在直接执行时运行,而在通过rake运行时不运行。通过Rake TestTask运行时出错:

** Execute test
/home/myockey/.rvm/rubies/ruby-1.9.2-p136/bin/ruby -I"lib:test" "/home/myockey/.rvm/gems/ruby-1.9.2-p136/gems/rake-0.8.7/lib/rake/rake_test_loader.rb" "test/unit/data_test.rb" "test/unit/station_test.rb" "test/unit/raw_test.rb" "test/unit/parser_test.rb" "test/unit/report_test.rb" 
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- test/unit/../metar_test_helper.rb (LoadError)
    from <internal:lib/rubygems/custom_require>:29:in `require'
    from test/unit/data_test.rb:4:in `<top (required)>'
    from /home/myockey/.rvm/gems/ruby-1.9.2-p136/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `load'
    from /home/myockey/.rvm/gems/ruby-1.9.2-p136/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `block in <main>'
    from /home/myockey/.rvm/gems/ruby-1.9.2-p136/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `each'
    from /home/myockey/.rvm/gems/ruby-1.9.2-p136/gems/rake-0.8.7/lib/rake/rake_test_loader.rb:5:in `<main>'
rake aborted!
ruby文件的顶部如下所示:

#!/usr/bin/env ruby
# encoding: utf-8

require File.dirname(__FILE__) + '/../metar_test_helper'

class TestMetarData < Test::Unit::TestCase
#/usr/bin/env ruby
#编码:utf-8
require File.dirname(_File_;)+'/../metar_test_helper'
类TestMetarData
请注意,我尝试将.rb文件扩展名添加到metar_test_helper中,但没有成功。请确保文件的父目录中存在名为metar_test_helper.rb的文件,并且该文件具有足够的访问权限


增加了一笔赏金。我知道这一定是一个简单的路径问题,但我非常感谢您提供一些指导来解决它并帮助我理解它。

这只是一个您需要解决的路径问题。当您手动运行测试时,您位于test/unit目录中,该目录的文件级别似乎提高了1级。在rake任务中,您是testdir的父级(假设RAILS_HOME)。

您在这两种情况下都使用Ruby 1.9.2吗

1.9.2不包括路径中的
”(
$:
),而1.9.2之前的版本则包括

要检查您使用的Ruby版本以及路径,请执行以下操作

STDERR.puts "RUBY_VERSION is #{RUBY_VERSION}"
STDERR.puts "Path is #{$:}"
在异常诱导行之前

require File.dirname(__FILE__) + '/../metar_test_helper'
如果这不能解决问题,那么通过做来询问它需要什么

STDERR.puts "The file I'm requiring is #{File.dirname(__FILE__) + '/../metar_test_helper'}"
看看这两种方法都是什么样子


您可能想在

中看到有关调试的其他提示,我怀疑这可能是一个path isue,但我重申我不明白为什么。请注意为无法加载的文件指定的相对路径:“test/unit/./metar\u test\u helper.rb”。这是来自RakeFile和我执行Rake的目录的正确相对路径。这不是它应该走的正确道路吗?我本来也要回答同样的问题,只是我对Ruby了解不多。:)
STDERR.puts "The file I'm requiring is #{File.dirname(__FILE__) + '/../metar_test_helper'}"