1

次の 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 で、Linux インストール スクリプトを使用して 2 台のマシンにインストールされています。

  • マシン 1: Debian 32 ビット、Ruby 1.8.7 (2008-08-11 パッチレベル 72) [i486-linux]
  • マシン 2: Ubuntu 64 ビット、ruby 1.8.7 (2010-01-10 パッチレベル 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 への強制変換はありますか?

一部の buildr トレースがhttp://pastebin.com/nf4HiYx9に添付されています。

ありがとうございました。

4

2 に答える 2

0

ペーストビンのスタックトレースは、ここに貼り付けられたスタックトレースとは大きく異なります。

protoc メソッドはどこで定義されていますか? それは Builder コアの一部ですか?

失敗する行が「if File.exist? path」であることを考えると、あるマシンで失敗し、他のマシンで失敗する理由は、使用している Ruby のバージョンである可能性があります。path は String であるはずですが、ある場合には String に変換され、他の場合には変換されない可能性があります。

全体的な修正は、protoc(...)、protoc(...).map(&:to_s) を呼び出した後に呼び出しを追加することです。

これが役に立ったことを願っています。

于 2011-01-21T22:51:50.353 に答える
0

.to_s を追加すると効果があり、すべて問題ないと思いました。しかし、暗黙の変換が失われた正確な場所と、なぜそれが良いのか (もしそうなら) を伝える答えをいただければ幸いです。

/以前のコメントより/

于 2011-03-17T09:22:15.800 に答える