Я играл с Rake и Albacore, чтобы посмотреть, могу ли я заменить наш существующий сценарий MSBuild, который развертывает программное обеспечение, чем-то, кроме XML. У меня есть задача, которая изменит значение отладки внутри web.config
на false
. Задача принимает в качестве аргумента каталог web.config
, но я не могу понять синтаксис, необходимый для предоставления этого аргумента в задаче по умолчанию.
require 'albacore'
require 'nokogiri'
deployment_path = 'c:/test-mars-deploy'
task :default => [ :build, :publish, :update_web_config['c:/test-mars-deploy'] ]
task :update_web_config, :deploy_path do |t, args|
deployment_path = #{args[:deploy_path]}
web_config_path = File.join deployment_path, 'Web.config'
File.open(web_config_path, 'r+') do |f|
doc = Nokogiri::XML(f)
puts 'finding attribute'
attribute = doc.xpath('/configuration/system.web/compilation')
attribute.attr('debug', 'false')
puts attribute.to_xml
end
File.delete(web_config_path)
File.new(web_config_path, 'w') do |f|
f.write(doc.to_s)
end
end
Я думаю, вам, возможно, придется использовать передачу параметров в старом стиле, например:
nicholas@hal:/tmp$ cat Rakefile
task :default => :all
deploy_path = ENV['deploy_path'] || "c:/some_path"
task :all do |t, args|
puts deploy_path.inspect
end
И вызывать с помощью:
nicholas@hal:/tmp$ rake
(in /tmp)
"c:/some_path"
Или, чтобы переопределить путь:
nicholas@hal:/tmp$ rake deploy_path=c:/other_path
(in /tmp)
"c:/other_path"
в основном вы называете свои аргументы как дополнительные символы после имени задачи. параметр args будет передан в блок, который отвечает на имя ваших аргументов, и вы можете вызвать задачу, передав аргументы в квадратных скобках ([]
)
ree-1.8.7-2010.02@rails3 matt@Zion:~/setup$ cat lib/tasks/blah.rake
task :blah, :n do |t, args|
puts args.n
end
ree-1.8.7-2010.02@rails3 matt@Zion:~/setup$ rake blah[20]
(in /home/matt/setup)
20