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

1119

被折叠的 条评论
为什么被折叠?



