为什么我的Rake任务在第一次运行时无法正常工作?

时间:2016-05-31 08:30:59

标签: ruby rake rake-task rakefile

背景

我有一个名为prepare的rake任务,根据我设置的环境变量更新我的hosts.txt文件,即:rake spec environment=test

mule任务从hosts变量读取以运行rspec测试。

Rake文件

require 'rake'
require 'rspec/core/rake_task'

hosts = IO.readlines('./hosts.txt').sort!


task :spec => 'spec:prepare'
task :spec => 'spec:mule_esb'

namespace :spec do

    task :prepare do
        sh ("cd ../capistrano && cap OVS_#{ENV['environment']} admin:trigger_serverspec_hosts")
    end

    task :mule_esb => hosts
        hosts.each do |host|
        begin
        desc "Run serverspec on #{host}"
        RSpec::Core::RakeTask.new(host) do |t|
            ENV['TARGET_HOST'] = host
            puts "\u2630 #{host.upcase}"
            # Write to file and stdout in documentation format
            t.rspec_opts = '--out rspec_results.txt --format documentation'
            t.pattern = "spec/mule_esb/*_spec.rb"
            t.verbose = false
            # Stop serverspec from early termination if it fails on a single host
            # Exit code will always be zero
            t.fail_on_error = false
        end
        rescue 
    end
  end
end

如您所见,我按如下方式订购了这些任务:

task :spec => 'spec:prepare'
task :spec => 'spec:mule_esb'

观察

  1. 命令:rake spec environment=test

    • prepare任务成功运行并更新hosts.txt文件 但mule_esb任务从作为一部分设置的主机运行 上次运行(当环境为staging时)
    • 如果我再次运行它而没有任何更改,它会在test环境主机
    • 上成功运行它
  2. 单独运行任务按预期工作

    • rake spec spec:prepare然后rake spec:mule_esb
  3. 我很难过为什么会这样。我对Rake并不熟悉 - 有人可以解释这种行为吗?

1 个答案:

答案 0 :(得分:0)

这样做

命名空间:spec do

task prepare: :environment do

    sh ("cd ../capistrano && cap OVS_#{ENV['environment']} proteus:trigger_serverspec_hosts")

end

使用任务名称指定环境。