1

我有以下构建器构建文件段:

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 64 位,ruby 1.8.7(2010-01-10 补丁级别 249)[x86_64-linux]

机器 1 编译所有文件。MARK机器 2 在-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上。

谢谢你。

4

2 回答 2

0

从我所见,pastebin 上的堆栈跟踪与此处粘贴的堆栈跟踪非常不同。

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

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

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

我希望这会有所帮助。

于 2011-01-21T22:51:50.353 回答
0

我认为添加 .to_s 会有所帮助,一切都很好。但是我很感激一个答案,告诉我隐式转换到底在哪里丢失了,为什么它很好(如果是的话)。

/来自我之前的评论/

于 2011-03-17T09:22:15.800 回答