Нотация зависимости задачи не поддерживает передачу аргументов. Он принимает только имена или символы, относящиеся к именам задач.
task :default => [ :build, :publish, :update_web_config['c:/test-mars-deploy'] ]
Тебе нужно сделать что-то подобное.
task :default => [ :build, :publish ] do
Rake::Task[:update_web_config].invoke 'c:/test-mars-deploy'
end
Помните, что invoke
будет работать только один раз на задачу, даже с разными аргументами. Это настоящий вызов цепочки зависимостей. Но это вызовет все зависимые задачи. Вы можете использовать execute
, если вам нужно несколько выполнений, но это не вызовет зависимые задачи.
Rake::Task[:update_web_config].invoke 'c:/test-mars-deploy'
Rake::Task[:update_web_config].execute 'c:/test-mars-deploy2'
Rake::Task[:update_web_config].execute 'c:/test-mars-deploy3'
В общем, я не рекомендую ни один из этих подходов. Мне кажется, что вызов invoke
или execute
указывает на плохо структурированную задачу. У вас просто нет этой проблемы, если вы преждевременно не параметризуетесь.
web_config = 'c:/test-mars-deploy/Web.config'
task :update_web_config do
File.open(web_config, 'r+') do |file|
# ...
end
end
Если вы должны параметризироваться, укажите массив или FileList
и сгенерируйте задачи для каждого элемента.
web_configs = FileList['c:/test-*/Web.config']
web_configs.each do |config|
task config do
File.open(config, 'r+') do |file|
# ...
end
end
end
task :update_all_web_configs => web_configs
Еще лучше, я опубликовал задание обновления конфигурации , которое сделает все это за вас! Укажите FileList
для обновления и хэш запросов xpath => replacements.
appconfig :update_web_configs do |x|
x.files = FileList['c:/test-*/Web.config']
x.replacements = {
"/configuration/system.web/compilation/@debug" => 'False' }
end