capistrano中的脚本使用

阅读更多
在capistrano的deploy脚本中,你可以根据实际情况大量使用脚本,通常是shell脚本
比如
run " yourshellcommand "
用起来非常方便,但有点必须注意,如果你的脚本前后具有很强的依赖性,你因该这么写
run " command1&&command2 "
而不是
run " command1 "
run
" command2 "
这是个很细微差别,一般注意不到,结果就是焦头烂额
比如今天我就干了件蠢事,我想在某个目录下,产生一个配置文件
于是就
run " cd#{path} "
run " scriptforcreatingaconfigurefile "
尝试了很多次,就是不能产生文件, 我很奇怪,capistrano我也用了一段时间了,执行脚本应该是没什么问题的,而且老早写的
run " cd#{current_path}&&mongrel_railscluster::configure-eproduction-p#{mongrel_port}-N#{mongrel_nodes}-c#{current_path} "
为什么就是能产生文件呢,把我的产生文件的脚本放到服务器上测也没问题,难道远程执行脚本有特殊的要求 ,我的脚本不符合这种特殊的要求?我就把这个脚本写成最简单以至不会出错的方式,结果还是不行,不得已查看源代码,也没看出所以然,我一直觉得我的脚本可能有问题,于是我放弃了用run,我采用了
command = " command1&&command2 "
invoke_command
( command , :via => :run )
居然可行,难道非得这样用?经过几次尝试采用了
run " command1&&command2 "
的写法居然可以,后来再看看以前的生成mongrel配置文件的这种写法,
看来不是偶然的,我实在没在意这种写法,我总觉得这是偷懒的写法,就好像装软件一样,make && make install分不分开写没什么区别,确实没什么区别,但那是在同一台机器上,前后的语境是连通的,换成目前远程脚本的方式,就有差别了,如果写成两个远程命令,前后语境不连通, 所以command1的路径下肯定不互有commnd2产生的文件,而且command2并不是没有产生文件,仅仅是它不在你希望的目录而是在~目录产生了文件,所以我的前面的那些猜测都是错误的,capistrano中的run运行shell脚本非常好,无需什么特殊设置,你完全可以通过合适的脚本来实现高级自动化的部署方案

你可能感兴趣的:(capistrano,脚本)