svn refused by server的困扰

今日,有女同事报告她的项目,在SVN Checkout的时候,发生refused by the server的错误。

放狗起搜,得到以下答案,并考虑其他情况,得到以下可能性:

1、Apache服务没重启。 我这台服务器上只有Nginx,没有Apache,但还是把Nginx和SVNServe的服务重启了一下。

2、防火墙没关。关闭了Windows防火墙。没用

3、怀疑该同事的Zend(试用版),因为不是完全版,被阻止。破解,依然没用

4、怀疑该同事的Zend有问题,换NetBeans,依然无用

5、hosts文件中,没有127.0.0.1    localhost这行,检查,有。

最后看到该同事屏幕右下角,有个360安全卫士,完全退出,再试,刷刷地开始checkout。该死的360

SVN自动同步到发布文件夹

首先做下语境定义,以下的所有说明,均基于以下设定:

客户端:开发人员用来编辑修改程序的电脑,可以是windows也可以是Linux、MacOS等

SVN端:提供SVN服务的电脑,通常简称为SVN服务器

Web服务器:提供Web SVN服务的电脑,在本文中和SVN端共用一台电脑。

这三者之间的关系:开发人员在客户端,用TortoiseSVN等单独的SVN客户端,或者内嵌SVN功能的IDE,如Zend Studio,将自己编写的代码同步到SVN端,这一步,一般来说,开发人员只需拿到属于自己的用户名密码、属于自己的项目就好了,不用多说;但是SVN端对这些数据都是二进制文件的方式保存成数据库,无法直接用肉眼查看,所以我打算在这台服务器上建立Web服务器,将数据从SVN端同步到Web服务器,这样就可以成为一个测试服务器,开发人员写完代码,SVN同步一下,就可以在Web服务器上看到效果。


服务器配置:

硬件:普通Intel CPU的PC机

操作系统:FreeBSD 64-bit

主要软件:Nginx、MySQL、PHP、Subversion(独立版,因为没装Apache)

SVN库保存目录设定:/var/svn

xy280库的保存目录:/var/svn/xy280

Web服务的Document Root:/var/vhosts/

xy280项目对应的目录:/var/vhosts/test.xxx.com


cd /var/vhosts/test.xxx.com

(注意,本项目在公网上是保存在二级目录下的,所以要先进入顶级目录,这样从SVN端同步到Web服务器时,就可以正好将带出的目录作为二级目录,如果项目保存在顶级目录下的话,这里就要进入Document Root)

svn co file:///var/svn/xy280

这一步就是将SVN库中的数据拷贝到Web服务器上的对应目录

进入xy280库目录下的hooks目录,将post-commit.tmpl拷贝为post-commit,去除所有原有未被注释的语句,输入以下

SVN=/usr/local/bin/svn

WEB=/var/vhosts/xytest.xxx.com/xy280
CHOWN=/usr/sbin/chown
CHMOD=/bin/chmod
 
cd /var/vhosts/xytest.xxx.com/xy280
$SVN cleanup
cd /var/svn/xy280/hooks
$SVN update –username aaa –password bbb $WEB //这里的用户名密码无论是字母数字,均无需加双引号
 
$CHOWN -R svn:svn /var/vhosts/xytest.xxx.com/xy280

$CHMOD -R 757 /var/vhosts/xytest.xxx.com/xy280/.svn

退出后chmod +x post-commit,给该文件加上执行权限,chown svn:svn post-commit,使之属于SVN用户,SVN组,拥有足够权限以便被执行

进入/usr/local/etc/nginx,修改nginx.conf

将原来user www www;修改为user svn svn;这一修改的目的是保证SVN和Nginx使用同样的用户名和组,从而最大限度地避免权限不够的问题

在another server这一块给你的域名做设置,基本类似于此:

    server {

        listen 80;
        server_name xytest.xxx.com;
        root /var/vhosts/xytest.xxx.com;
        index index.php;
 
        location ~ \.php$ {
         fastcgi_pass 127.0.0.1:9000;
         fastcgi_index index.php;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include fastcgi_params;
        }
        access_log /var/log/access_xytest.xxx.com.log main;

    }

这样基本上就可以达到我们的目的了