我有以下buildr buildfile段:

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,在两个Machnies上安装了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而不是字符串。但是一台机器如何接受,另一台机器不接受呢?是否有强制转换来串字符串?

一些构建轨迹附着在 http://pastebin.com/nf4hiyx9 .

谢谢你。

有帮助吗?

解决方案 2

我认为添加.to_s有帮助,一切都很好。但是我可以欣赏一个答案,即告诉隐性转换在哪里丢失了,为什么(如果是)很好。

/从我之前的评论/

其他提示

与我所看到的相比,Pastebin上的堆叠与这里粘贴的堆叠式叠加。

原始方法在哪里定义?它是Buildr Core的一部分吗?

鉴于失败的行是“如果file.exist?path?path?”,它之所以在一台计算机上失败而不是另一台计算机失败的原因。路径应该有一个字符串,但在一种情况下可能会转换为字符串,而不是另一种情况。

总体修复是在调用ProtoC(...),ProtoC(...)。MAP(&:to_s)之后添加调用。

我希望这有所帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top