耙子测试任务的顺序

时间:2016-05-02 08:20:37

标签: ruby rake rake-task rakefile

我有一个包含三个任务的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按照我指定的顺序运行任务,但它似乎总是首先执行测试任务。值得注意的是,测试不会运行 - 但无论如何都会产生任务创建的输出。

2 个答案:

答案 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的实例。传递给构造函数的所有代码都在此阶段执行/生成。这产生了原始问题中描述的行为。