2016-06-13 2 views
0

C'est la première fois que j'utilise rake, et je pense à un problème avec les dépendances de fichiers.La méthode Ruby Rake FILE ne fonctionne pas

Pour faire un test, en Rakefile.rb je mets ce code:

task :ffile do 

    f1 = "config.yaml" 
    f2 = "Rakefile.rb" 

    if File.file? f1 then puts "## test file task on #{f1}" end 
    if File.file? f2 then puts "## test file task on #{f2}" end 

    file "#{f1}" => "#{f2}" do 
     puts "lol" 
    end 

    file "#{f2}" => "#{f1}" do 
     puts "lul" 
    end 

    file "#{f1}" do 
     puts "lil" 
    end 

    file "#{f2}" do 
     puts "lal" 
    end 

end 

Je suis sous Windows 10, et quand il est lancé

rake ffile 

le résultat est

Starting rake operations... 
## test file task on config.yaml 
## test file task on Rakefile.rb 

c'est la méthode de fichier ne fait rien dans les quatre cas. J'ai également essayé d'enlever la citation (c'est-à-dire f1 au lieu de "#{f1}" et ainsi de suite dans tous file) mais obtenir le même résultat. Clairement chaque fois que j'économise Rakefile.rb lors des tests, donc je suis sûr que cela devrait déclencher l'un des méthodes de fichiers.

Une erreur de syntaxe s'est produite? C'est un problème avec Windows 10?

Merci

+0

Que doit faire 'file'? Pouvez-vous poster le code? – floum

Répondre

1

La méthode file est en fait un DSL pour définir une tâche de fichier https://github.com/ruby/rake/blob/b63f7d33d72782f646ef95da10300d273c9b8006/lib/rake/dsl_definition.rb#L75, qui doit être invoqué manuellement.

Rake::Task[f1].invoke 
Rake::Task[f2].invoke 

Étant donné que vos définitions de dsl ont une dépendance circulaire: TOP => config.yaml => Rakefile.rb => config.yaml, en ajoutant le code ci-dessus soulèvera une erreur.

Mais je pense que vous pourriez avoir l'idée comment invoquer les tâches de fichiers.

0

Merci larrylv, j'ai compris!

J'ai deux erreurs:

  1. circulaire, comme larrylv dit
  2. et je n'invoque pas la tâche de fichier! (Larrylv dit)

donc je signaler un exemple simple qui fonctionne

f1 = "config.yaml" 
f2 = "Rakefile.rb" 

task :ffile => ["#{f1}"] 

file "#{f1}" => ["#{f2}"] do 
    puts "lul" 
end 

Avec cela, la commande rake ffile fonctionne comme aspecté.

Merci!