Метод Ruby Rake FILE не работает

Я впервые использую rake и вижу проблему с файловыми зависимостями.

Чтобы сделать тест, в Rakefile.rb я помещаю этот код:

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

Я на Windows 10, и при запуске

rake ffile

результат

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

то есть файловый метод ничего не делает во всех четырех случаях. Я также попытался удалить кавычку (т.е. f1 вместо "#{f1}" и так далее во всех file), но получил тот же результат. Ясно, что каждый раз, когда я сохраняю Rakefile.rb во время тестирования, я уверен, что это должно вызвать один из файловых методов.

Синтаксическая ошибка? Это устранение неполадок с Windows 10?

Спасибо


person Sim Sca    schedule 13.06.2016    source источник
comment
Что должен делать file? Можете ли вы опубликовать код?   -  person floum    schedule 13.06.2016


Ответы (2)


Метод file на самом деле является DSL для определения файловой задачи https://github.com/ruby/rake/blob/b63f7d33d72782f646ef95da10300d273c9b8006/lib/rake/dsl_definition.rb#L75, который необходимо вызывать вручную.

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

Поскольку ваши определения DSL имеют циклическую зависимость: TOP => config.yaml => Rakefile.rb => config.yaml, добавление приведенного выше кода вызовет ошибку.

Но я думаю, вы могли понять, как вызывать файловые задачи.

person Larry Lv    schedule 13.06.2016

Спасибо larrylv, я понял!

У меня две ошибки:

  1. круглый, как сказал larrylv
  2. и я не вызываю файловую задачу! (ларрилв сказал)

Поэтому я сообщаю простой пример, который работает

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

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

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

При этом команда rake ffile работает как аспектированная.

Спасибо!

person Sim Sca    schedule 13.06.2016