biaoge's blog

以前端技术为主

Archive for September, 2011

前端代码的本地化开发

with 5 comments

如果网站的后台是PHP或者JAVA的,那么搭建本地开发环境并不是什么难事,可是由于我们大部分站点的后台语言是C++写的cgi程序,服务器是Linux,所以cgi都是在Linux下编译的,而我们的开发机器是windows,因此对我们来讲,搭建本地开发环境比较困难。所以一直以来都是所有的前端开发人员都是在一个由samba搭建的Linux共享磁盘里面进行开发。

随着团队人数的增加,多人在共享磁盘里面开发的弊端越来越明显。首先是代码很难用版本控制工具进行管理,由于samba的效率问题,在多人使用的samba共享目录里面操作SVN非常痛苦,更新和提交操作的速度很慢,经常卡死,后来不得已直接取消了在开发环境用SVN进行版本管理。但是没有版本管理之后很容易造成代码的丢失或者被他人覆盖,毕竟是多人共用的磁盘,出现任何情况都有可能,所以经常要手动备份代码,这对于大部分开发人员来说是一个痛苦的过程。共享磁盘开发的另一个弊端是,有些同事开发了一个功能只完成了一半导致流程中断不能继续下去,妨碍其他同事的工作。

所以最近我们又开始讨论本地化开发的问题,如果采用本地开发就可以大体上解决上面的两个问题。在本机使用版本管理,代码更容易追踪,谁在什么时间修改了什么代码可以看得一目了然。经过团队内部的讨论得到如下基本可行的本地开发方案:

所需要的工具和前提条件:

1.TortoiseSVN和一个前端代码的版本库

2.Plink及开发服务器的SSH账号

3.Fiddler + Willow(感谢YuniShi)

4.本机安装Apache

我们前端代码基本上都在htdocs和template两个目录里面。htdocs里面主要是静态HTML、CSS,JS和图片等,当然HTML不能算全静态的,其中用到了Apache的SSI指令。template目录里面全部是cgi的模版文件。

本机安装好Apache之后,将前端代码(htdocs和template)checkout到本机,htdocs设置为Apache的根目录,由于htdocs里面都是静态文件,只要Apache开启了SSI指令,完全可以通过本机的Apache来访问。所以配host www.domain.com 127.0.0.1即可。

template里面的代码可以必须通过服务器的cgi来解析,因此不可能通过本机的Apache来访问。解决方法是在开发服务器上checkout一份前端代码的工作副本,将所有的cgi请求发送到服务器,服务器上的cgi解析的也是服务器上的template里面的模版。这里会有两个问题:一、访问静态文件的域名和访问cgi的域名是同一个,如何将静态文件请求发送到本机Apache而将cgi的请求发送到服务器?这个时候Fiddler + Willow就派上了用场,由于所有的cgi都在/cgi-bin/这个目录中,通过Willow的针对文件夹配host的功能就可以将所有cgi的请求发送到linux开发服务器。下图中通过Willow的Host list将www.tenpay.com和img.tenpay.com两个域名指向本机ip:127.0.0.1,然后通过一个extension将所有/cgi-bin/目录的hosts配置到开发服务器:

第二个问题是cgi访问的是linux服务器上的template目录的模版文件,如何谈得上是本地开发?我们修改的其实是本地的模版文件然后通过SVN钩子自动同步到服务器上。原理是这样的:我们给本机的SVN工作副本设置一个post-commit钩子,就是一个批处理文件,我们修改完模版文件需要看效果的时候就做一次SVN提交操作,提交操作会触发这个post-commit钩子,而这个钩子的作用就是通过Plink的SSH连接到服务器并更新服务器上的SVN工作副本。SVN钩子的设置方法见下图:

钩子设置完毕之后整个设置过程就OK了,这个时候在浏览器打开www.domain.com(开启Fiddler)会发现所有的静态文件都请求了本机的服务器,而所有的cgi请求发送到了开发服务器,如果修改静态文件,直接刷新浏览器就可以看效果,如果修改了模版文件则需要提交一下SVN再刷新看效果。

Written by admin

September 9th, 2011 at 12:02 am

Posted in 前端技术

Tagged with