Capistrano的应用场景是待部署的服务器可以直接访问svn、cvs等源代码管理服务器,所以代码是直接checkout到服务器上的。但是实际的情况常常是,源代码管理服务器处于公司内网,而待部署的的服务器处于外网。这种情况
早就有人遇到过了,可以通过修改update_code这个任务来实现的。先是获取代码到本地机器,然后压缩成一个tar包,再传到服务器上并展开。
这主意不错,但是实际应用的时候却发现tar文件无法在服务器上正常解开。一开始我还以为是用windows版本的tar工具bsdtar有问题,换了WinRar来压缩,结果都一样。仔细看,原来是上传前后的字节大小并不一致。这似乎应该是文件打开模式的问题,文本模式和二进制模式?
代码是这样的:
put(File.read(src),dest)
我百思不得其解的是,File.read到底返回什么东西?如果是整个文件的内容,那么文件很大怎么办?而且,半天我也找不到File.read的定义。
在Google论坛上 发了帖子,有热心人指出了,在Window上File.read是以文本模式打开和读取的,所以有问题。建议换成
body=File.open(src, "rb") { |f| f.read }
put(body, dest)
就没
这主意不错,但是实际应用的时候却发现tar文件无法在服务器上正常解开。一开始我还以为是用windows版本的tar工具bsdtar有问题,换了WinRar来压缩,结果都一样。仔细看,原来是上传前后的字节大小并不一致。这似乎应该是文件打开模式的问题,文本模式和二进制模式?
代码是这样的:
put(File.read(src),dest)
我百思不得其解的是,File.read到底返回什么东西?如果是整个文件的内容,那么文件很大怎么办?而且,半天我也找不到File.read的定义。
在Google论坛上 发了帖子,有热心人指出了,在Window上File.read是以文本模式打开和读取的,所以有问题。建议换成
body=File.open(src, "rb") { |f| f.read }
put(body, dest)
就没