用 IIS 搭建 mercurial server
mercurial server
对于代码管理工具,更多的人可能对 Git 更熟悉一些(Git太火了)。其实另外一款分布式代码管理工具也被广泛的使用,它就是 mercurial。当多人协作时最好能够通过创建一个 mercurial server 对用户进行权限认证,同时也方便持续集成。
关于创建 mercurial server 的步骤,mercurial 官方的 wiki 有说明,网上也有很多朋友分享了自己的创建过程。但笔者在创建的过程中还是颇费了一番周折才最终成功,所以也在此分享一下,希望对朋友们能有帮助。
环境及软件安装
笔者使用的操作系统为 Server2012R2 x64 Standard 中文版。在安装其他工具前,先安装 IIS。安装 IIS 时需要注意,一定要把 CGI,ISAPI 这两个选项都勾选上。
安装 Python,使用默认设置安装 python 2.7.x。
安装 mercurial server,请从这里在这里下载 mercurial server 的安装包并安装。安装完成后检查 C:\Python27\Lib\site-packages\mercurial 目录是否被正确安装!
注意,python 和 sercurial server 必须保持相同的架构,不要一个安装 x86 另一个安装 x64。
设置 IIS 服务器支持 python 模块
在 IIS 管理器中选择 IIS server,双击”ISAPI 和 CGI 限制”,添加一项新的扩展:

喜欢使用命令行的同学也可以通过一行命令直接搞定:
C:\Windows\system32\inetsrv\appcmd set config /section:isapiCgiRestriction /+"[path='C:\Python27\python.exe -u %22%s%22',description='Python',allowed='True']"
创建网站
在 IIS 中创建一个新的网站,端口绑定 81(80端口已被默认网站占用)。在网站的根目录中添加 web.config 文件。web.config 文件的内容为:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="Python" path="*.cgi" verb="*" modules="CgiModule" scriptProcessor="C:\Python27\python.exe -u "%s"" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
</configuration>
需要注意文件中 python.exe 的路径,请根据自己机器上的安装目录进行配置。
网站的基本设置已经完成,下面写个简单的测试文件检查一下网站能否正常工作。
在网站的根目录下创建 test.cgi 文件,文件内容如下:
print 'Status: 200 OK'
print 'Content-Type: text/html'
print '<html><body><h1>Hello world!</h1></body></html>'
在浏览器中访问 http://localhost:81/test.cgi,如果看不到”Hello world!”,请检查前面的步骤。
配置 mercurial server
在网站的根目录下添加 hgweb.config 文件,内容如下:
[collections]
C:\repos = C:\repos [web]
push_ssl = false
allow_push = *
在网站的根目录下添加 hgweb.cgi 文件,内容如下:
#!/usr/bin/env python
# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "xxxxx\hgweb.config" from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb import hgweb, wsgicgi
application = hgweb(config)
wsgicgi.launch(application)
注意,请按实际情况配置 config 的路径。
这就 OK 了,让我们在 c:\repos 目录下初始化一个库然后访问 http://localhost:81/hgweb.cgi 看看:

配置 URL 重定向
每次都要在 URL 中输入 /hgweb.cgi,一来不方便,二来总感觉怪怪的。能不能输入 http://localhost:81 就你可以正常访问呢?当然可以,只要添加一个重定向的配置就可以了。
首先安装 IIS 的插件:http://www.iis.net/downloads/microsoft/url-rewrite
下载完直接安装,然后在 web.config 文件中添加 rewrite 元素,新的 web.config 文件内容为:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="Python" path="*.cgi" verb="*" modules="CgiModule" scriptProcessor="C:\Python27\python.exe -u "%s"" resourceType="Unspecified" requireAccess="Script" />
</handlers>
<rewrite>
<rules>
<rule name="rewrite to hgwebdir" patternSyntax="Wildcard">
<match url="*" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
</conditions>
<action type="Rewrite" url="hgweb.cgi/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
好了,现在访问下 http://localhost:81 试试,和访问 http://localhost:81/hgweb.cgi 是一样的。
设置匿名访问权限
默认情况下我们已经可以使用匿名权限从服务器克隆库并进行操作了。但当你执行 hg push 命令时会收到一个 HTTP Error 502: Bad Gateway 的错误。原因是匿名用户没有修改服务器上文件的权限。我们需要给匿名身份验证设置一个有修改文件权限的用户。

现在就可以正常的执行 push 操作了。
总结
相比其他工具的一键式安装与配置,mercurial server 的安装和配置稍显复杂。我们只是配置了最简单的匿名访问,并且不支持 ssl,不过这在局域网中基本也够用了。
用 IIS 搭建 mercurial server的更多相关文章
- 如何在 IIS 上搭建 mercurial server
mercurial server 对于代码管理工具,更多的人可能更熟悉 Git 一些(Git 太火了).其实另外一款分布式代码管理工具也被广泛的使用,它就是 mercurial.多人协作时,最好能够通 ...
- 在iis搭建nuget server时遇到405 method not allow
<configuration> <system.webServer> <validation validateIntegratedModeConfiguration=&q ...
- Nginx 在windows下配合iis搭建负载均衡过程 [转]
因为项目遇到大量图片存储问题,虽然现在我们图片还不是很多(目前在1T上下,预计增长速度每年1.3倍的增长速度),自己在思考如何有效地存储大量图片时,查找一些资料,看到了,有人使用 Nginx搭建服务器 ...
- ubuntu 搭建Mercurial 服务(nginx)
ubuntu 搭建Mercurial 服务(nginx) 环境:ubuntu 12.05 Mercurial 步骤: (1)安装nginx 和 Mercurial: sudo apt-get ins ...
- (转载) 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
这一篇是从0开始搭建SQL Server AlwaysOn 的第四篇,这一篇开始搭建异地机房节点 注意点1 注意异地节点最好至少有2个AG节点,否则在本地节点进行手动故障转移的时候会出现仲裁警告,提示 ...
- 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)
从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...
- 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)
从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...
- 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)
从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...
- 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)
从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...
随机推荐
- 调用百度翻译API接口功能
public string appid = "自己的APPID"; public string q = "要翻译的文本"; "; public str ...
- python永久添加第三方模块,PYTHONPATH的设置
今天用pip安装pymysql后遇到了一个问题,在PyCharm中import pymysql模块时,运行却提示我找不到pymysql mudule 我先考虑的是pymysql没有安装成功,但是cmd ...
- Software Engineer’s path to the best annual performance review
http://michaelscodingspot.com/2017/06/04/software-engineers-path-best-annual-performance-review/ How ...
- Spring hibernate 事务的流程
1 在业务方法开始之前 ①获取session ②把session和当前线程绑定,这样就可以在Dao中使用SessionFactory的getCurrentSession()方法来获取session了 ...
- Oracle 导出用户下的所有索引创建语句
SELECT dbms_lob.substr(dbms_metadata.get_ddl('INDEX', INDEX_NAME))||';' from dba_indexes where owne ...
- IIS中“绑定”,“IP地址全部未分配”到底是个什么玩意
最好是选择“全部未分配”,用这个选项时,服务器本机,在IE浏览器地址栏输入http://localhosts/ 或127.0.0.1 可以打开本机架设的网站的主页,也可以输入内网IP地址打开内网的网站 ...
- 陈远波(java)--Git 入门
本章节讲解思路:1.在Git hup官网注册一个Git账号:2.下载git bash管理工具 3.在git bash上绑定GitHup账号密码: 一:进入GitHup官网:https://githu ...
- JDK 环境变量 Windows配置
安装完成JDK后需要配置环境变量,下面是环境变量的配置方法 1.配置环境变量: 对于Java程序开发而言,主要会使用JDK的两个命令:javac.exe.java.exe.路径:C:\Java\jdk ...
- 洛谷P1803
#include <iostream>#include <algorithm>#include <cstdio>using namespace std; struc ...
- Monad、Actor与并发编程--基于线程与基于事件的并发编程之争
将线程.事件.状态等包装成流的源. 核心:解决线程的消耗和锁的效率问题. Java和Node.js可以说分别是基于线程和基于事件的两个并发编程代表,它们互相指责瞧不起对方,让我们看看各种阵营的声音: ...