如果源文件不存在,如何在capistrano脚本中复制文件而不抛出错误?

时间:2013-03-08 05:50:20

标签: ruby capistrano

我正在使用capistrano来部署我的php应用程序。我需要将配置文件列表从以前的版本复制到新版本。该列表以数组形式维护。当我循环遍历此数组以从先前版本复制到当前版本时,如果未找到源文件,则会抛出错误并进一步执行停止。我希望脚本忽略这种情况并继续执行下一个命令,如果源文件不存在则打印一条简单的消息。我尝试使用如下命令,但没有运气:  run "test -f /tmp/myfile && cp -p /tmp/myfile /home/admin

甚至

if(File.exists?("/tmp/myfile"))

 run "cp -p /tmp/myfile /home/admin" 


else

  print " file doesnot exist"

end

提前致谢!!

1 个答案:

答案 0 :(得分:1)

我会这样做:

run <<-CMD
  if [ -f /tmp/myfile ]; then \
    cp -p /tmp/myfile /home/admin; \
  else \
    echo 'myfile does not exist'; \
  fi
CMD

请记住,所有capistrano run命令都在远程服务器上执行,并且 只有退出值0表示成功。 "test -f /tmp/myfile && cp -p /tmp/myfile /home/admin的结果会 如果1不存在,仍然是/tmp/myfile。您可以使用|| 使用该文件不存在的消息调用echo

test -f /tmp/myfile && cp -p /tmp/myfile /home/admin && echo myfile does not exist

这是一回事。