Chinaunix首页 | 论坛 | 博客
  • 博客访问: 479935
  • 博文数量: 95
  • 博客积分: 2117
  • 博客等级: 大尉
  • 技术积分: 2301
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-16 21:10
个人简介

辽宁铁岭人,现居大连。1970年生。 先后供职于 中国国际海运网、大连学堂科技、大连华仁视线网络科技有限公司、大连中科海云科技有限公司,任职技术总监。 精通PHP、JAVA、Javascript、HTML、CSS等网络编程技术及Linux操作系统。 精通面向对象编程、设计模式、重构及互联网产品设计。

文章分类

全部博文(95)

文章存档

2013年(31)

2012年(2)

2011年(34)

2010年(25)

2008年(3)

分类: WINDOWS

2011-10-18 10:24:42

按照转载的“在Windows使用apache搭建Mercurial版本控制服务”安装Mercurial WEB服务,没有成功,因为我下载的都是最新版的软件,包括:,Mercurial 1.9.3 ,,,感觉配置方法应会有所不同,于是到该文指定的http://mercurial.selenic.com/wiki/PublishingRepositories转了一圈,果然有了一些不同,hgwebdir已经为hgweb所取代。按如下步骤重新来过:
1. 安装TortoiseHg,直接装吧,不需要考虑长名路径问题了。装在了C:\Program Files\TortoiseHg中。其实这个对设置Mercurial的WEB服务并不是必须的,只是作为客户端和本地版本管理时,更为方便。
2. 安装Mercurial 1.9.3,也没管长路径,装在了C:\Program Files\Mercurial。
3. 安装Python2.6.6,没安装2.7或3,是因为Mercurial声明支持的是python2.6,安装在了C:\python26。
4. 安装XAMPP1.7.7,这个倒是没装在C:\Program Files下,直接装在了C:\xampp。
5. 使用TortoiseHg建立一个版本库:在D:下建立hg文件夹,进行D:\hg,右击,选择TortoiseHg | Create Repository Here。
6. 在C:\xampp\htdocs下建立一个文件夹,hgweb。
7. 在C:\xampp\htdocs\hgweb中建立hgweb.cgi文件,内容如下(最新的内容可在找到):
  1. #!/usr/bin/env python
  2. #
  3. # An example hgweb CGI script, edit as necessary
  4. # See also http://mercurial.selenic.com/wiki/PublishingRepositories
  5. # Path to repo or hgweb config to serve (see 'hg help hgweb')
  6. config = "/path/to/repo/or/config"
  7. # Uncomment and adjust if Mercurial is not installed system-wide:
  8. #import sys; sys.path.insert(0, "/path/to/python/lib")
  9. # Uncomment to send python tracebacks to the browser if an error occurs:
  10. #import cgitb; cgitb.enable()
  11. from mercurial import demandimport; demandimport.enable()
  12. from mercurial.hgweb import hgweb, wsgicgi
  13. application = hgweb(config)
  14. wsgicgi.launch(application)
将首行改成指向python.exe位置:
  1. #!C:/Python26/python.exe
第六行的注释:# Path to repo or hgweb config to serve (see 'hg help hgweb'),是说config变量可以指向仓库,也可以指向一个配置文件。先简单点,指向仓库,将第七行改为:
  1. config = "D:/hg"
按照《在Windows使用apache搭建Mercurial版本控制服务》中的指示,将C:\Program Files\Mercurial\library.zip解压到C:\xampp\mlib,将C:\Program Files\Mercurial\templates文件夹也复制到该文件夹下。
去除第八行的注释,将其中的路径改为C:/xampp/mlib:
  1. import sys; sys.path.insert(0, "C:/xampp/mlib")
改动之后的文件内容如下:

  1. #!C:/Python26/python.exe
  2. #
  3. # An example hgweb CGI script, edit as necessary
  4. # See also http://mercurial.selenic.com/wiki/PublishingRepositories
  5. # Path to repo or hgweb config to serve (see 'hg help hgweb')
  6. config = "D:/hg"
  7. # Uncomment and adjust if Mercurial is not installed system-wide:
  8. import sys; sys.path.insert(0, "C:/xampp/mlib")
  9. # Uncomment to send python tracebacks to the browser if an error occurs:
  10. #import cgitb; cgitb.enable()
  11. from mercurial import demandimport; demandimport.enable()
  12. from mercurial.hgweb import hgweb, wsgicgi
  13. application = hgweb(config)
  14. wsgicgi.launch(application)

8. 修改Apache的配置文件http.conf,在最后添加一行:
  1. ScriptAlias /hg "C:/xampp/htdocs/hgweb/hgweb.cgi"
9. 重启Apache,浏览器中输入localhost/hg,很期待看到成果,结果却很失望,看到的却是:
  1. Internal Server Error
10. 去掉第十行的注释
  1. import cgitb; cgitb.enable()
刷新浏览器,看到如下提示:
  1. Traceback (most recent call last):
  2.   File "hgweb.cgi", line 17, in
  3.     application = hgweb(config)
  4.   File "mercurial/hgweb/__init__.py", line 12, in hgweb
  5.     return hgweb_mod.hgweb(*args, **kwargs)
  6.   File "mercurial/hgweb/hgweb_mod.py", line 30, in __init__
  7.     self.repo = hg.repository(u, repo)
  8.   File "mercurial/hg.py", line 63, in repository
  9.     repo = _lookup(path).instance(ui, path, create)
  10.   File "mercurial/bundlerepo.py", line 303, in instance
  11.     return bundlerepository(ui, repopath, bundlename)
  12.   File "mercurial/bundlerepo.py", line 175, in __init__
  13.     raise util.Abort(_("%s: not a Mercurial bundle file") % bundlename)
  14. Abort: D:/xampp/htdocs/hgweb/hgweb.config: not a Mercurial bundle file
一番折腾后,问题没有得到解决。
google、百度,均未能解决问题。
无意中在Mercurial维基中,找到了一遍文章:UnixInstall,其中有这样一行:
  1. $ export PYTHONPATH=/usr/local/lib/python2.5/site-packages:${PYTHONPATH}
但是在我的python2.6安装中,并没有 site-packages这个文件夹。
在Mercurial官方下载了mercurial-1.9.3.win32-py2.6.exe,安装,显示安装在C:\Program Files\Lib\site-packages。

  1. import sys; sys.path.insert(0, "C:/xampp/mlib")
改为
  1. import sys; sys.path.insert(0, "C:/Python26/Lib/site-packages")
刷新页面,问题解决。
不过这样只能访问一个库,想访问多个库,需要使用hgweb.config文件,将config变量赋值为hgweb.config
  1. config = "hgweb.config"
如果hgweb.config不想和hgweb.cgi放在同一个文件夹下,那就在赋值时指定绝对路径。否则就被视为相对于hgweb.cgi的相对路径。现在这样的设置,就表明hgweb.config和hgweb.cgi在同一个文件夹内。
在D:\xampp\htdocs\hgweb中建立hgweb.config文件,先用paths方式指定库,内容为:
  1. [paths]
  2. hg = D:/hg
访问,可以看到其中有了一个项目hg,点击项目名称,即可访问该库。
再看collection方式:
  1. [collections]
  2. D:/hg = D:/hg
访问,居然看不到项目名?!
修改一下:
  1. [collections]
  2. hg = D:/hg
项目名显示为等号右侧的值,无论左边怎么改,都显示等号右边的值。
改成:
  1. [collections]
  2. D: = D:/hg
项目名显示为hg。
再用TortoiesHg在F:/test/hgtest建立一个项目,将hgweb.config的内容改成:
  1. [collections]
  2. D: = D:/hg
  3. F:/test = F:/test/hgtest
显示了两个项目,名称分别为hg和hgtest。推测是,显示的名称为右侧的值去掉左侧的值之后的字符串。
还可以在collections中指向一个包含多个项目库的父目录,多个库将逐项显示。
例如,在F:/test下分别建立hgtest和hgrespo两个项目库,将hgweb.config的内容设置为:
  1. [collections]
  2. F:/test = F:/test
依照刚才的推测,将显示出分别名为hgtest和hgrespo的两个项目库。
最后要说明的是,不是一定要将包含有hgweb.cgi的文件夹放在htdocs(或其它Apache指定的主目录中),如果放在其它位置的话,只需要在Apache的配置文件中指定目录的访问权限即可。
例如,在D:盘建立一个myhg文件夹,将hgweb.cgi放入其中,并修改hgweb.cgi中的各个路径。同时,在Apache的配置文件http.conf文件的最后再增加如下内容:
  1. <Directory "D:/myhg">
  2.     Options ExecCGI FollowSymLinks
  3.     Order deny,allow
  4.     Allow from all
  5. </Directory>
即可用访问了。

注:重新安装了一次,这次的安装顺序是:Python2.6.6,Mercurial 1.9.3,Mercurial 1.9.3 for Python2.6,xampp1.7.7。
建立hgweb文件夹和hgweb.cgi和hgweb.config文件,调整Apache配置。
hgweb.cgi仅修改了第一行的Python路径和第六行的config变量所指向的路径,没有解压library.zip,也没有修改第十行,一次性成功,没有出现任何问题。

阅读(2935) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~