Особенность работы метода run в Capistrano
-
03 октября 2008 22:46
-
Комментарии
Потратил сегодня полтора часа пытаясь заставить работать следующий код:
task :tmp_list, :roles => [:app] do
run <<-CMD
if [ -d /tmp/ ];
then
ls /tmp/
fi
CMD
end
и получал одну и ту же ошибку
* executing `tmp_list'
* executing "if [ -d /tmp/ ];\\\nthen\\\n ls /tmp/\\\nfi"
servers: ["111.111.111.111"]
[111.111.111.111] executing command
*** [err :: 111.111.111.111] Syntax error: end of file unexpected (expecting "fi")
command finished
failed: "sh -c \"if [ -d /tmp/ ];\\\\\nthen\\\\\n ls /tmp/\\\\\nfi\"" on 111.111.111.111
Проблема заключалась в том что sh передаётся команда содержащая символы переноса строки. В man-е освящене этого момента я не нашел.
Обойти эту проблему можно как минимум двумя способами:
1) Избавится от переносов строк. Тогда код будет выглядеть примерно так:
task :tmp_list, :roles => [:app] do
run "if [ -d /tmp/ ]; then ls /tmp/ ; fi"
end
2) Либо использовать условные операторы
task :tmp_list, :roles => [:app] do
run "([ -d /tmp/ ] && ls /tmp/) || true"
end
Трюк с true нужен для того чтобы в случае неудачи (если директория не будет найдена) выполнение набора комманд завершилось с кодом ошибки равным нулю (что означает что проблем при выполнении не возникло)
Тэги: capistrano
Будь всегда в курсе последних новостей блога подписавшись на новости
в формате RSS. Присоединяйся!
в формате RSS. Присоединяйся!
* * *
Добавить новый комментарий
Вы можете использовать следующие BBCode теги в комментариях:
| BBCode тег | Результат |
|---|---|
| [b]Жирный текст[/b] | Жирный текст |
| [i]Курсив[/i] | Курсив |
| [u]Подчёркнутый текст[/u] | Подчёркнутый текст |
| [url]http://example.com[/url] | http://example.com |
| [url=http://example.com]Example[/url] | Example |
|
[code]for message in @messages puts message.name end[/code] |
|
|
[quote] IE6 must die! [/quote] |
IE6 must die! |

