Ошибка сборки ruby, невозможно преобразовать Rake :: FileTask в String - PullRequest
1 голос
/ 20 января 2011

У меня есть следующий сегмент buildfile для 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 -объявленном месте, с

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 ]

0 голосов
/ 17 марта 2011

Я понял, что добавление .to_s помогает, и все в порядке.Но я мог бы по достоинству оценить ответ о том, где именно неявное преобразование было потеряно и почему оно хорошо (если так).

/ из моего предыдущего комментария /

0 голосов
/ 22 января 2011

Трассировка стека на pastebin очень отличается от трассировки стека, вставленной здесь, из того, что я вижу.

Где определяется метод protoc?Является ли оно частью ядра Buildr?

Причиной сбоя на одном компьютере, а не на другом, может быть версия Ruby, которая у вас есть, учитывая, что строка, в которой происходит сбой, - это «if File.exist? Path».путь должен быть строкой, но, вероятно, преобразуется в строку в одном случае, но не в другом.

Общее исправление заключается в добавлении вызова после вызова protoc (...), protoc (...). map (&: to_s).

Надеюсь, это помогло.

...