Capistrano开发日记(2)

当Capistrano遇到源代码服务器在内网,部署服务器在外网的情况时,可以通过修改update_code任务,将代码 checkout 到本地,压缩后上传到服务器解压。但在Windows环境下,由于文件读取模式问题,tar包无法正常解开。通过使用`File.open`以二进制模式读取文件解决了此问题,减少了内存占用。Capistrano的灵活ruby语法也在此过程中起到了关键作用。
摘要由CSDN通过智能技术生成
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)

就没
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值