73

我一直在寻找关于如何让 hgweb 在 IIS 上工作的体面说明,但我没有发现太多的价值。

Mercurial wiki上有这个“一步一步”,但不是很好。还有thisthis,但同样,我找不到好的步骤来引导那些开始的地方。

4

11 回答 11

49

昨天我只需要安装一个新的 Mercurial 实例,这里是 1.7 的更新说明:

  1. 安装 Mercurial(这些说明在 1.7 中测试过)
  2. 安装 Python(对于 Mercurial 1.7,必须使用 Python 2.6.6 的 x86 版本)
  3. 您需要从 Mercurial 源下载 hgweb.cgi 文件。您可以通过运行下载源代码:hg clone https://www.mercurial-scm.org/repo/hg/
  4. 创建一个文件夹作为您的 Web 应用程序文件夹。您需要将三件事复制到此文件夹中:

    • hgweb.cgi 文件
    • “C:\Program Files\Mercurial”文件夹中的 Library.zip 的内容
    • “C:\Program Files\Mercurial”中的 Templates 文件夹
  5. 您需要确保在 IIS 中设置了 Python。

    • 通过以下方式启用 CGI:控制面板 -> 打开或关闭 Windows 功能 -> 角色 -> Web 服务器 (IIS) -> 添加角色服务 -> 检查 CGI
    • 在 IIS 中创建一个新网站并确保物理路径是您在上面创建的文件夹
    • 在新网站的处理程序映射中,选择“添加脚本映射”。输入*.cgi作为请求路径,c:\Python26\python.exe -u "%s"作为可执行文件,Python作为名称。
  6. 您还需要创建一个名为“hgweb.config”的文件,其内容类似于下面。文件中的路径必须是驱动器上要存储 Mercurial 存储库的位置:

    [集合]
    c:\Mercurial\repos = c:\Mercurial\repos

  7. 编辑 hgweb.cgi 文件并将设置 hgweb.config 路径的行更改为如下所示(无论 hgweb.config 文件在哪里):

    配置 = "C:\Mercurial\hgweb.config"

  8. 现在,打开浏览器并导航到http://localhost/mercurial/hgweb.cgi(或您在 IIS 中设置的任何适当的 URL 路径),您应该会看到 Mercurial Repositories 页面。

另外,请查看Jeremy Skinners 博客文章。它有点过时,但有一些额外的好步骤,比如为更干净的 URL 设置 URL 重写。

于 2009-05-20T09:12:31.933 回答
34

似乎自从 Mercurial 1.5.2 发布以来,这些教程并不完全正确。一方面,hgwebdir.cgi 已被删除,现在替换为 hgweb.cgi。

最适合我的说明位于eworldui.net

http://www.eworldui.net/blog/post/2010/04/08/Setting-up-Mercurial-server-in-IIS7-using-a-ISAPI-module.aspx

这些说明适用于 IIS 7 或更高版本。如果您在 IIS 6 上进行设置,我编写了针对 Win2k3 和 IIS 6.0 的类似说明:

http://partialclass.blogspot.com/2010/05/setting-up-mercurial-server-on-win2k3.html

更新: 在完成这项工作后不久,我了解到 BitBucket 更改了他们的定价方案以提供免费、无限制的私人托管:https ://bitbucket.org/ 。当我最初从事这个项目时,我会立即选择它。

于 2010-05-04T16:08:00.367 回答
12

我发现Vampire Basic上的博客文章是一个好的开始,但它并没有详细说明我所追求的。

我写了一篇由 4 部分组成的博客文章,让你从头开始使用 IIS,包括 Active Directory 集成、设置推/拉的安全权限、自定义模板,我会在这里复制它,但它相当长篇大论,Mercurial 真的被设计为托管在 Linux/Apache 上:

http://www.endswithsaurus.com/2010/05/setting-up-and-configuring-mercurial-in.html

于 2010-07-23T17:44:40.700 回答
11

这里有一个相当不错和全面的教程:http: //vampirebasic.blogspot.com/2009/06/running-mercurial-on-windows.html

于 2009-07-19T16:09:05.083 回答
11

以下是我在进行大量研究以在 IIS6 上设置 hgwebdir.cgi 后所做的工作。它基于以下站点:

您需要在服务器上安装以下内容:

  • Mercurial(我使用的是 1.5 版)
  • 蟒蛇 2.6。Python 的版本取决于安装的 Mercurial 版本。Mercurial 1.5 使用 Python 2.6。即使您运行的是 x64,也要安装 x86。

我的步骤是:

  • 为网站创建一个目录。我使用了 c:\inetpub\wwwroot\hg。
  • 在 IIS 中,右键单击 hg 的文件夹,选择属性,选择主目录选项卡。
  • 单击创建应用程序按钮。将执行权限设置为“脚本”。
  • 仍然在主目录选项卡中,单击配置按钮。在“应用程序配置”弹出窗口中,单击添加按钮以添加应用程序扩展。可执行文件是 c:\Python26\python.exe -u "%s" "%s"。扩展名为 .cgi。将“动词”设置为“限制为:GET、HEAD、POST”。检查脚本引擎并验证文件是否存在。
  • 在目录安全选项卡中,单击身份验证和访问控制部分中的编辑按钮。取消选中所有身份验证方法,并选中“基本身份验证”方法。如果您喜欢 Active Directory 域,请设置默认域。
  • 在 IIS 中,单击左侧面板上的 Web Service Extensions 文件夹。单击“添加新的 Web 服务扩展”链接。扩展名应该是Python,需要的文件是c:\Python26\python.exe -u "%s" "%s"。确保新扩展名是“允许的”。

现在是测试 Python 是否正常工作的好时机。在新的 Hg 文件夹中创建一个名为 test.cgi 的文件。粘贴以下 python 代码:

print 'Status: 200 OK'
print 'Content-type: text/html'
print

print '<html><head>'
print ''
print '<h1>It works!</h1>'
print ''
print ''

打开浏览器访问您的站点,例如http://localhost/hg/te​​st.cgi

您应该看到“它有效!” 在浏览器中。

接下来让我们让 hgwebdir 工作。

  • 删除 test.cgi
  • 将 hg 存储库克隆到新目录:https://www.mercurial-scm.org/repo/hg/
  • 将 hgwebdir.cgi 复制到您的 Web 目录:c:\inetpub\wwwroot\hg\ 来自克隆的 hg 存储库
  • 编辑文件并更改
application = hgwebdir('hgweb.config')
wsgicgi.launch(application)

application = hgwebdir('c:\inetpub\wwwroot\hg\hgweb.config')
wsgicgi.launch(application)
  • 将 Mercurial 目录 c:\Program Files\Mercurial\ 中的 Library.zip 文件解压缩到您的 Web 目录 c:\inetpub\wwwroot\hg\
  • 将模板目录从 c:\Program Files\Mercurial\templates\ 复制到 c:\inetpub\wwwroot\hg\templates\
  • 在您的 web 目录中创建一个名为 hgweb.config 的文件。

现在是测试它的好时机。在浏览器中访问以下 URL,http://localhost/hg/hgwebdir.cgi

  • 编辑 hgweb.config,并粘贴以下内容:
[collections]
\\server\share$\Hg\ = \\server\share$\Hg\
[web]
allow_push = *
push_ssl = false

这些都是我的偏好,例如我们在 \\server\share$\Hg 的子目录中有我们的存储库。Web 应用程序将通过浏览器在登录用户的权限下运行,因此他们需要对共享的读/写权限。

最后一步是允许长连接,这在您第一次克隆存储库时可能发生。运行以下命令将超时时间增加到 50 分钟:

cd \inetpub\AdminScripts\
cscript adsutil.vbs GET /W3SVC/CGITimeout 
cscript adsutil.vbs SET /W3SVC/CGITimeout 3000
于 2010-04-06T09:40:00.920 回答
3

使用 mercurial 克隆 mercurial 存储库:

hg clone https://www.mercurial-scm.org/repo/hg/

您会在顶层找到 hgwebdir.cgi。它应该像任何其他 cgi 脚本一样安装。

于 2009-05-04T21:39:24.083 回答
2

在过去一周左右的时间里,我一直在为 mercurial 1.7.2 设置这个设置,为了让它工作,我不得不做一些与上述文章不同的事情。

在这里发帖是因为谷歌一直把我带回这里....

此处发布的完整说明

我遵循了这些说明这些说明的组合(在源代码中)

主要区别在于我必须执行mercurial 的“纯 python”安装,否则它会抱怨缺少 dll,我发现对 pywin 和 isapi-wsgi 使用“python 安装程序”很重要。(也许这对有经验的 python 开发人员来说是显而易见的,但我是 python 新手,所以这对我来说是个新闻)

希望这对某人有所帮助,而且我不仅仅是在编造东西(我可能是,就像我说的,python 新手)

于 2010-12-06T15:05:57.500 回答
1

hg 红皮书包含一些比我在其他地方看到的更好的一般说明。它们不是特定于 IIS 的,但它们非常好:

http://hgbook.red-bean.com/read/collaborating-with-other-people.html#sec:collab:cgi

于 2009-08-11T21:35:18.773 回答
1

我遇到了“...无法加载模块...”类型错误,经过一番阅读,我的关键是忽略 Mercurial 文件夹中的 Library.zip 文件,而是使用 C:\程序文件 (x86)\TortoiseHg 文件夹。

我在本指南中找到的 #6 提示:

http://www.endswithsaurus.com/2010/05/setting-up-and-configuring-mercurial-in.html

希望这可以帮助某人...

于 2010-12-10T19:54:50.160 回答
0

我知道这是一个老问题,但我真的很难在 Server 2019 和 IIS 10 上安装 Hg。这是我为使其正常工作所做的工作:

  1. 安装Python 2.7,在我的例子中是python-2.7.18.amd64.msi。我假设它安装在 C:\Python27 中。确保将 python 添加到您的路径并安装了 pip。

  2. 在命令行使用 pip 将 Mercurial 作为模块安装:

pip install mercurial
  1. 默认网站下添加一个名为“hg”的新应用程序并将其指向您要使用的目录。

  2. 将 Python 配置为 IIS 10.0 中的 CGI 处理程序,用于这个新网站(或整个 Web 服务器,如果您愿意)。您可以手动执行此操作,也可以在web.config文件中创建/添加以下内容:

<system.webServer>
    <handlers accessPolicy="Read, Script">
        <add name="Python 2.7" path="*.cgi" verb="*" modules="CgiModule" scriptProcessor="C:\Python27\python.exe -u &quot;%s&quot;" resourceType="File" />
    </handlers>
</system.webServer>
  1. 在“hg”应用程序文件夹中创建一个类似于以下内容的hgweb.cgi :
#!/usr/bin/env python3
#
# An example hgweb CGI script, edit as necessary
# See also https://mercurial-scm.org/wiki/PublishingRepositories

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

# Uncomment and adjust if Mercurial is not installed system-wide
# (consult "installed modules" path from 'hg debuginstall'):
# import sys; sys.path.insert(0, "/path/to/python/lib")

# Uncomment to send python tracebacks to the browser if an error occurs:
#import cgitb; cgitb.enable()

from mercurial import demandimport

demandimport.enable()
from mercurial.hgweb import hgweb, wsgicgi

application = hgweb(config)
wsgicgi.launch(application)
  1. 在“hg”应用程序文件夹中创建hgweb.config文件并将其指向您的存储库,如下所示:
[collections]
C:\Web\www\hg\repos\ = C:\Web\www\hg\repos\
  1. 导航到 http://localhost/hg/hgweb.cgi 并享受!
于 2021-06-24T17:06:58.877 回答
-1

你可以试试HgLab。这不完全是 hgwebdir;相反,它是一个纯托管的 Mercurial 实现,带有推拉服务器和存储库浏览器。

于 2012-10-10T08:17:27.860 回答