我有一个包含三个任务的rake文件,我需要按顺序执行。
<style>
#wrapper{
width:80%;
margin:0 auto;
}
.csehasibticker{
width: 550px;
height: 255px;
overflow: hidden;
border: 1px solid #eee;
border-radius: 5px;
box-shadow: 0px 0px 5px #eee;
background: #00a1e0;
color:#fff;
text-align: left;
margin:0 auto;
}
.csehasibticker h3 {
padding: 0 0 7px 7px;
border-bottom: 1px solid #444;
}
ul {
list-style: none;
padding: 0;
margin: 0;
font-style: italic;
}
ul li {
list-style: none;
height:50px;
padding:7px;
border-bottom: 1px solid #444;
}
</style>
当我在终端中运行require 'rake/testtask'
file 'some_binary_file.elf' do
puts 'fetching file from server ...'
# this task connects to a server and downloads some binaries
# it takes a few seconds to run
end
task flash_application: 'some_binary_file.elf' do
puts 'flashing the file to the hardware ...'
# this task copies a binary file to the flash memory
# of some external hardware, also takes a few seconds
end
Rake::TestTask(:hardware) do |t|
puts 'running tests ...'
f.test_files = FileList['test/**/*_test.rb']
end
rake default: [:flash_application, :hardware]
时,它会产生以下输出。
$ rake
我希望rake按照我指定的顺序运行任务,但它似乎总是首先执行测试任务。值得注意的是,测试不会运行 - 但无论如何都会产生任务创建的输出。
答案 0 :(得分:2)
如果要按特定顺序运行任务,则必须相互依赖。在您的情况下,:flash_application应该依赖于:硬件
答案 1 :(得分:1)
发现错误 - 这个问题不是ruby / rake特有的。 flash_application任务更改工作目录。因此,当前工作目录中没有任务“硬件”的Rakefile。但是对这个bug的研究产生了一些有趣的见解。
Ruby数组是有序的,如果要按顺序执行任务,就足以在数组中按执行顺序定义它们,即
task some_task: [:first, :second, :third]
Rake::TestTask.new
在调用时定义了一个普通的旧rake任务。这意味着,当调用rake时,ruby会创建一个Rake :: TestTask的实例。传递给构造函数的所有代码都在此阶段执行/生成。这产生了原始问题中描述的行为。