svn_auth系统由windows迁移到linux下遇到的问题
最近在做svn权限管理系统,要求在windows下和linux下均可运行,由于前期的代码编写都是基于windos的,所以今天对代码进行了改写,以适应linux系统的运行,linux的测试环境为ubuntu。在此几下中间的修改过程和遇到的问题。
1.换行符问题
已知的各个操作系统的换行符号如下:
OS | Line Break |
---|---|
widows | \r\n |
linux\unix | \n |
MAC | \r |
一般操作系统上的运行库会自动决定文本文件的换行格式. 如一个程序在windows上运行就生成CR/LF换行格式的文本文件,而在Linux上运行就生成LF格式换行的文本文件. 在一个平台上使用另一种换行符的文件文件可能会带来意想不到的问题, 特别是在编辑程序代码时. 有时候代码在编辑器中显示正常, 但在编辑时却会因为换行符问题而出错. 很多文本/代码编辑器带有换行符转换功能, 使用这个功能可以将文本文件中的换行符在不同格式单互换.
那么怎样去屏蔽这种差异呢?
既然rails是跨平台的,那么ruby语言输出换行符的时候肯定会自动判断是那种系统,并输出相应的换行符,我们可以利用这点来实现。即:用ruby语言中的puts输出一行,会自动换行。
2. 路径问题
在windows的命令行提示符下,目录的分隔符是“\”,但“\”同时也是转义字符,并且无法在unix、linux下运行,所以ruby支持windows下使用“/”作为分隔符,但是注意:win32ole之类的功能不能这样用。
所以对目录的访问和创建,我们可以通过ruby的Dir、File类来操作,分隔符用“/”,这样就可以避免了。但是有一点需要注意,Dir创建目录时不可创建父目录,这时可以用FileUtils类来代替,FileUtils类支持自动创建父目录。
3.基于apache的svn版本控制系统
svn版本控制系统的环境是apache+subversion,通过域用户认证进行按路径授权,在windows下的域用户认证是通过sspi实现的,但是在linux下找不到相应的sspi文件,网上关于这方面的结论是sspi仅有windows版本,不存在相应的linux版本,后来通过svn管理员获知,公司目前的svn库是通过openldap实现的域用户认证,同时openldap在windows、linux下均可运行。
这里需要强调一点的是,linux下的apache组成和windows下的不同。
windows下是一键安装式的,所有的配置都在httpd.conf中,module等文件也都中规中矩的在特定文件夹中。
在linux中,配置文件有多个,且日志、配置文件都不在同一个目录中,但是主要的配置文件是/etc/apache2/apache2.conf中,其余的配置文件都是通过include引入的,而且apache2.conf中制定了apache需要的mod文件。特别指明一点,mods-avaliabe是可以获取的mod文件,但是不一定适用,如果你的mod文件需要在文件中价值,需要用链接的方式放在mods-enabled中,这个在apache2.conf可以看出来。