Buildr ruby​​错误,无法将Rake :: FileTask转换为String

时间:2011-01-20 19:22:27

标签: ruby buildr

我有以下buildr构建文件段:

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安装脚本。

  • 机器1:Debian 32bit,ruby 1.8.7(2008-08-11 patchlevel 72)[i486-linux]
  • 机器2:Ubuntu 64bit,ruby 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而不是一个字符串..但是一台机器怎么接受它,另一台机器不接受它?是否强制转换为String?

某些构建器跟踪附加在http://pastebin.com/nf4HiYx9

谢谢。

2 个答案:

答案 0 :(得分:0)

我可以看到,pastebin上的堆栈跟踪与此处粘贴的堆栈跟踪非常不同。

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

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

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

我希望这会有所帮助。

答案 1 :(得分:0)

我认为添加.to_s有帮助,一切都很好。但我可以理解一个答案,告诉我隐含的转换究竟在哪里丢失,为什么它很好(如果是这样)。

/来自我之前的评论/