【问题标题】:How do I set up Mercurial and hgweb on IIS?如何在 IIS 上设置 Mercurial 和 hgweb?
【发布时间】:2010-10-23 13:05:20
【问题描述】:

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

Mercurial wiki 上有this "step by step",但不是很好。 还有thisthis,但同样,我找不到好的步骤来引导它们的开始。

【问题讨论】:

  • 为什么不从 wiki 上的说明开始,然后说出你遇到问题的地方。另外,如果你得到它的工作,你可以更正维基。
  • 我的 windows 安装 wiki 错误。没有 hgwebdir.cgi。它也没有告诉你从哪里得到它,把它放在哪里等等。Mercurial 确实缺乏一个好的 IIS 指南,我希望 StackOverflow 可以介入。
  • @Kevin Berridge - vampirebasic.blogspot.com/2009/06/… 有一个 Windows 演练,这对我有用。
  • @Firegarden 该链接不再有效

标签: windows iis mercurial


【解决方案1】:

我知道这是一个老问题,但我真的很难在 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. 在 IIS 10.0 中将 Python 配置为这个新网站(或整个 Web 服务器,如果您愿意)的 CGI 处理程序。您可以手动执行此操作,也可以在 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 并享受吧!

【讨论】:

    【解决方案2】:

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

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

    • Mercurial(我用的是 1.5 版)
    • Python 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 服务扩展文件夹。单击“添加新的 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/test.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 的文件。

    现在是测试它的好时机。在浏览器中访问以下网址,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
    

    【讨论】:

    • +1 干得好,只需要为 Mercurial 1.7 更改一些小东西
    【解决方案3】:

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

    1. Install Mercurial(这些指令用 1.7 测试过)
    2. Install 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 文件在哪里):

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

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

    另外,请查看Jeremy Skinners blog post。它有点过时了,但有一些额外的好步骤,比如为更清晰的 URL 设置 URL 重写。

    【讨论】:

    • 我已使用这些说明在 XP(专业版)下设置 Mercurial 和 IIS。索引显示出来,但如果我单击任何存储库链接,我会收到 404 错误。有什么建议吗?
    • 找到了!!!!设置 .cgi 映射时,Executable 条目应为 c:\Python25\python.exe -u "%s" 并确保检查文件是否存在是 UNCHECKED!!!!!!
    • 这些说明现在有点过时了。查看 Ken 的答案以获取更多更新说明:stackoverflow.com/questions/818571/…
    • 您能否包括绕过 IIS 施加的 30MB 上传限制的步骤?我尝试设置maxAllowedContentLengthmaxRequestLength,但似乎都没有效果!
    【解决方案4】:

    使用 mercurial 克隆 mercurial 存储库:

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

        自 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/。当我最初从事这个项目时,我会立即选择它。

        【讨论】:

        • 我最初尝试使用 Jeremy Skinner 的教程进行配置,但遇到了删除 hgwebdir.cgi 的问题。使用 IIS7 教程,我能够进行任何复杂的设置。谢谢!
        • 非常好 -- 感谢您指出这些非常有用的参考资料,Ken P.
        【解决方案7】:

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

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

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

        希望这对某人有所帮助...

        【讨论】:

          【解决方案8】:

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

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

          完整说明posted here

          我关注了these instructionsthese (in the source)的组合

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

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

          【讨论】:

            【解决方案9】:

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

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

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

            【讨论】:

            • 哇——我希望我能把这个投票给顶!干的很好。你不只是使用来自iis.net/download/URLRewrite 的 URL 重写模块的任何原因???
            • @Goyuix - 谢谢,我没有使用它有 2 个原因 - 1. 我不知道它存在,也没有人向我指出那个方向。 2. 我所做的少量研究发现 ISAPI Rewrite 足以满足我使用它的目的,所以这就是我最终使用的。感谢您指出这一点,我会检查一下。
            • @Goyuix - 你指给我的信息表明 IIS URL 重写适用于 IIS 7?这适用于 IIS 6 吗?我的博文针对的是 IIS 6,因为那是我曾经/正在使用的。
            • 这是一个很棒的系列文章。您绝对应该跟进 IIS 7
            • @BobTheBuilder - 我正在计划它,但我必须抽出时间将我的服务器升级到 Win2K8,目前我在 Win2K3 上,tbh 已经满足我的需要并且已经相当稳定,所以我不需要升级。
            【解决方案10】:

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

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

            【讨论】:

              【解决方案11】:

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

              【讨论】:

              • 这篇博文是一个很好的开始,但有些不足。我写了一组相当广泛的关于在 IIS 上托管 Mercurial 的博客文章 - 请参阅下面的答案:stackoverflow.com/questions/818571/…
              猜你喜欢
              • 2011-05-20
              • 1970-01-01
              • 2011-01-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2023-03-06
              • 2018-04-08
              • 2016-07-01
              相关资源
              最近更新 更多