背景
我有一个名为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'
观察
命令:rake spec environment=test
prepare
任务成功运行并更新hosts.txt
文件
但mule_esb
任务从作为一部分设置的主机运行
上次运行(当环境为staging
时)test
环境主机单独运行任务按预期工作
rake spec spec:prepare
然后rake spec:mule_esb
我很难过为什么会这样。我对Rake并不熟悉 - 有人可以解释这种行为吗?
答案 0 :(得分:0)
这样做
命名空间:spec do
task prepare: :environment do
sh ("cd ../capistrano && cap OVS_#{ENV['environment']} proteus:trigger_serverspec_hosts")
end
端
使用任务名称指定环境。