2011-01-20 31 views
2

我有以下buildr构建文件段:Buildr红宝石错误,不能转换的Rake :: FileTask转换成String

require "buildr/protobuf" 

.... 

define "protobuf-stuff" do 
    pbs = protoc(
     Dir[_("pbsrc/some/pkg/*.proto")], { 
     :include => [_("pbsrc")], 
     }) 

    comp = compile.from(pbs).with(PROTOBUF_LIB) # MARK 
    package :jar 
end 

Buildr是1.4.4,在Linux安装在两台machnies安装脚本。

  • 机1:32位的Debian,红宝石1.8.7(2008-08-11 PATCHLEVEL 72)[1486-的linux]
  • 机2:64位的Ubuntu,红宝石1.8.7(2010-01-10 PATCHLEVEL 249)[x86_64-linux]

机器1编译所有文件。 2机上失败的MARK -ed地方,

Buildr aborted! 
TypeError : can't convert Rake::FileTask into String 
/usr/lib/ruby/gems/1.8/gems/buildr-1.4.4/lib/buildr/core/application.rb:414:in `raw_load_buildfile' 
/usr/lib/ruby/gems/1.8/gems/buildr-1.4.4/lib/buildr/core/application.rb:218:in `load_buildfile' 
/usr/lib/ruby/gems/1.8/gems/buildr-1.4.4/lib/buildr/core/application.rb:213:in `load_buildfile' 

现在我可以看到,pbs是FileTask而不是字符串..但是怎么来的一台机器接受它,其他的呢?是否有强制转换为字符串?

一些建筑物痕迹附于http://pastebin.com/nf4HiYx9

谢谢。

+0

我计算过,加.to_s帮助,一切都很好。但是我可以欣赏一个答案,告诉我们隐含的转换丢失了,为什么它是好的(如果是的话)。 – ron 2011-01-20 19:23:15

回答

2

我觉得添加.to_s有帮助,一切都很好。但是我可以欣赏一个答案,告诉我们隐含的转换丢失了,为什么它是好的(如果是的话)。

/从我先前的评论/

0

pastebin上的堆栈跟踪与此处粘贴的堆栈跟踪非常不同,从我所能看到的情况来看。

定义了protoc方法在哪里?它是Buildr核心的一部分吗?

为什么它在一台机器上失败而不是另一台机器可能是你拥有的Ruby版本,因为失败的那一行是“如果File.exist?path”。路径应该是一个字符串,但可能在一种情况下转换为字符串,而不是另一种。

整体修复方法是在调用protoc(...),protoc(...)。map(&:to_s)之后添加调用。

我希望这有助于。