Question

I ont le segment de buildfile de buildr suivant:

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 est 1.4.4, installé avec le script d'installation Linux sur deux machnies.

  • Machine 1: Debian 32bit, rubis 1.8.7 (11/08/2008 patchlevel 72) [i486-linux]
  • Machine 2: Ubuntu 64bits, Ruby 1.8.7 (2010-01-10 patchlevel 249) [x86_64-linux]

fichier machine 1 de compiles de tout. Machine 2 échoue sur la place MARK-ed, avec

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'

Maintenant, je peux voir que pbs est un FileTask et non une chaîne .. mais comment se fait une machine accepte, l'autre non? Y at-il une conversion forcée à cordes?

Quelques traces de Buildr sont attachés à http://pastebin.com/nf4HiYx9 .

Merci.

Était-ce utile?

La solution 2

je me suis dit que l'ajout .to_s aide et tout va bien. Mais je pourrais apprécier un récit de réponse où exactement la conversion implicite a été perdu, et pourquoi il est bon (le cas échéant).

/ de mon commentaire précédent /

Autres conseils

Le stacktrace sur Pastebin est très différent du stacktrace collé ici, de ce que je peux voir.

Où est la méthode protoc définie? Est-il une partie du noyau Buildr?

La raison pour laquelle il échoue sur une machine et non l'autre pourrait être la version de Ruby que vous avez, étant donné que la ligne qui échoue est « si File.exist? Chemin ». chemin il est censé être une chaîne, mais est probablement converti en chaîne dans un cas mais pas l'autre.

Le correctif global est d'ajouter un appel après avoir appelé protoc (...), protoc (...) la carte.. (Et: to_s)

J'espère que cela a aidé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top