在IIS7上托管Mercurial

10

请注意,这个问题可能更适合发布在serverfault.com上,但由于它是关于托管程序员源代码库的,我不太确定。我先在这里发布,相信如果需要的话,它会被迁移。

我正在尝试在自己的服务器上托管我的Mercurial代码库的克隆版本(我把主要的代码库放在其他地方),并尝试在IIS下设置Mercurial。

我按照这里的指南进行操作,但是我收到了一个错误信息

已解决:有关详情,请参见本问题底部。

错误消息如下:

mercurial.error.RepoError: 未找到存储库/path/to/repo/or/config

以下是我的操作步骤:

  1. 我安装了Mercurial 1.5.2
  2. 我创建了 c:\inetpub\hg
  3. 我按照网页的说明下载了hg源文件,并将hgweb.cgi文件复制到c:\inetpub\hg目录中。(注意,该网页上显示应该使用hgwebdir.cgi文件,但是这个特定的文件不存在,hgweb.cgi文件存在,这可能是问题的原因吗?
  4. 我添加了一个hgweb.config文件,内容如下:

    [paths]
    repo1 = C:/hg/**
    [web]
    style = monoblue
    
  5. 我创建了 c:\hg 目录,创建了一个名为 test 的子目录,并在其中创建了一个仓库。

  6. 我安装了 Python 2.6.5,这是从网站上获取的最新 2.6 版本(网页上提到需要安装正确的版本,否则会收到特定的错误消息,但由于我没有收到任何类似的错误消息,所以我认为 2.6.5 不是问题)。
  7. 我添加了一个新的虚拟主机 hg.vkarlsen.no,并将其指向 c:\inetpub\hg。
  8. 对于此主机,我在处理程序映射部分添加了一个脚本映射,将 *.cgi 映射到 c:\python26\python.exe -u %s %s,按照网站上的说明进行设置。

然后我通过导航到 http://hg.vkarlsen.no/hgweb.cgi 进行了测试,但是我收到了一个错误消息。

为了更容易地进行测试,我打开了命令提示符,导航到了 c:\inetpub\hg,并执行了以下命令(错误消息是下面文本的一部分):

C:\inetpub\hg>c:\python26\python.exe -u hgweb.cgi
Traceback (most recent call last):
  File "hgweb.cgi", line 16, in <module>
    application = hgweb(config)
  File "mercurial\hgweb\__init__.pyc", line 12, in hgweb

  File "mercurial\hgweb\hgweb_mod.pyc", line 30, in __init__

  File "mercurial\hg.pyc", line 82, in repository

  File "mercurial\localrepo.pyc", line 2221, in instance

  File "mercurial\localrepo.pyc", line 62, in __init__

mercurial.error.RepoError: repository /path/to/repo/or/config not found

有人知道我需要查看什么来修复这个问题吗?


编辑:好的,我想我已经接近解决方案了,但我仍然被卡住了。

我意识到.cgi文件是一个Python脚本文件,不是编译文件,所以我打开它进行编辑,发现其中有以下内容:

# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "/path/to/repo/or/config"

这是我找到的关于特定错误消息的来源。

如果我将这行改为:

config = "c:\\hg\\test"

那么我可以通过Mercurial Web界面导航到空仓库。

然而,我想要托管多个仓库,既然该行说我也可以链接到一个hgweb配置文件,我尝试了这个方法:

config = "c:\\inetpub\\hg\\hgweb.config"

但是我会得到以下错误信息:

mercurial.error.Abort: c:\inetpub\hg\hgweb.config: not a Mercurial bundle file
Exception ImportError: 'No module named shutil' in <bound method bundlerepository.__del__
of <mercurial.bundlerepo.bundlerepository object at 0x0260A110>> ignored

我尝试过的所有配置变量似乎都无法起作用:

config = "hgweb.config"
config = "c:\\hg\\hgweb.config"
  • 我记不起来其他各种变体了。

所以,我还是茫然无措,有人能指点一下吗?

希望这个问题能为其他像我一样困惑的人提供一些信息。


1
你可以回答自己并接受你的答案,这样问题就不会显示为未回答。 - tonfa
1个回答

7

我最终不得不编辑hgweb.cgi文件:

from:  from mercurial.hgweb import hgweb, wsgicgi
       application = hgweb(config)

to:    from mercurial.hgweb import hgweb, hgwebdir, wsgicgi
       application = hgwebdir(config)

请注意添加了hgwebdir部分。这是我的hgweb.config文件,位于与hgweb.cgi文件相同的目录中:
[collections]
C:/hg/ = C:/hg/

[web]
style = gitweb

现在它成功地为我的代码库提供服务。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接