Я вызываю команду ant в своем скрипте ruby (в Windows XP), используя% x [].Мне нужно изменить рабочий каталог, чтобы муравей запускался в правильном.Таким образом, есть две команды dos, которые называются.
cmd = "cd #{$testing_root_directory.gsub("/","\\\\")} && ant -lib lib -f \"#{$testing_root_directory_builds.gsub("/","\\\\")}\\#{params['group']}\\#{params['run']}_build.xml\" 2>&1"
, а содержимое переменной cmd выглядит так:
cd C:\Program Files\TestPro\TestPro Automation Framework\ && ant -lib l
ib -f "C:\Program Files\TestPro\TestPro Automation Framework\Output Files\builds
\basics\login_build.xml" 2>&1
Это правильно, и output = %x[#{cmd}]
работает очень хорошо.
Теперь мне нужно было добавить новое имя цели при вызове ant.Поэтому я изменил код, чтобы учесть это.См. #{$target_name}
в конце строки.
cmd = "cd #{$testing_root_directory.gsub("/","\\\\")} && ant -lib lib -f \"#{$testing_root_directory_builds.gsub("/","\\\\")}\\#{params['group']}\\#{params['run']}_build.xml\" #{$target_name} 2>&1"
, затем помещает cmd, дает мне правильный вывод
cd C:\Program Files\TestPro\TestPro Automation Framework\ && ant -lib l
ib -f "C:\Program Files\TestPro\TestPro Automation Framework\Output Files\builds
\basics\login_build.xml" aftertaf 2>&1
Но теперь output = %x[#{cmd}]
никогда не заканчивается.В моем файле муравьев есть две цели.Я ясно вижу, что первый завершен (по умолчанию), и когда я завершаю свой сценарий ruby с помощью сочетания клавиш CTRL + CI, я вижу, что второй (aftertaf) должен был начаться.На экране есть его метка.
Если я использую содержимое второй переменной cmd, то, что не работает из ruby , и запускаю ее непосредственно из команды DOSлиния работает нормально .Так что мне кажется, что ruby не проходит строку правильно.cmd.inspect дает мне "cd C:\\Program Files\\TestPro\\TestPro Automation Framework\\ && ant -lib lib -
f \"C:\\Program Files\\TestPro\\TestPro Automation Framework\\Output Files\\buil
ds\\basics\\login_build.xml\" aftertaf 2>&1"
Полагаю, я могу реорганизовать свои цели муравья, чтобы мой сценарий работал, но я хотел бы знать, почему% x [] никогда не заканчивается сейчас.
- Apache Ant (TM) версия 1.8.2, скомпилированная 20 декабря 2010 года
- ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32]
- onWindows XP
ОБНОВЛЕНИЕ 1
Моя aftertaf
цель выглядит как
<target name="aftertaf" depends="taf" description="after TAF ruby stuff">
<exec executable="ruby.exe">
<arg line="C:\EduTester\others\afterant.rb update_latest 10.0.0.50:4567 basics login 20110803111432"/>
</exec>
</target>
При запуске cmd с system()
запуск муравья останавливается на aftertaf
цель.Существует метка aftertaf: и все.
ОБНОВЛЕНИЕ 2
Когда я нажимаю CTRL + CI, меня спрашивают Terminate batch job (Y/N)?
, который, как мне кажется, исходит от муравья.Я добавил echo до и после exec в target aftertaf и echo перед выполнением exec.
Использование полного пути к ruby.exe в exec не помогло
UPDATE 3
Мой скрипт ruby - это приложение sinatra.Я не знал, что это имеет значение.Похоже, имеет значение.Если я позвоню выше %X[]
из 'нормального' файла rb, это будет работать.Если я вызываю его из Синатры, то выполнение второй цели не выполняется.Пакетный муравейный файл чего-то ждет.Если я удаляю тег exec из новой цели, все работает нормально.Обратите внимание, что exec работает , если ant запускается из .rb или командной строки или .bat файла.Если я запускаю тот же .rb или .bat из sinatra , exec не работает .