我有以下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编译所有文件。机器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。
谢谢。
答案 0 :(得分:0)
我可以看到,pastebin上的堆栈跟踪与此处粘贴的堆栈跟踪非常不同。
protoc方法定义在哪里?它是Buildr核心的一部分吗?
它在一台机器而不是另一台机器上失败的原因可能是你拥有的Ruby版本,因为失败的行是“if File.exist?path”。路径应该是一个String,但可能在一种情况下转换为String而不是另一种情况。
整体修复是在调用protoc(...),protoc(...)。map(&:to_s)之后添加一个调用。
我希望这会有所帮助。
答案 1 :(得分:0)
我认为添加.to_s有帮助,一切都很好。但我可以理解一个答案,告诉我隐含的转换究竟在哪里丢失,为什么它很好(如果是这样)。
/来自我之前的评论/