如何在IIS上设置Mercurial和hgwebdir?

时间:2009-05-04 02:08:48

标签: windows iis mercurial

我一直在寻找关于如何让hgwebdir在IIS上工作的体面指导,但我没有找到太多值得的。

Mercurial wiki上有this "step by step",但它并不是很好。 还有thisthis,但是再一次,我找不到很好的步骤来引导它们开始的地方。

11 个答案:

答案 0 :(得分:49)

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

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

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

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

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

  8. 编辑hgweb.cgi文件,并将设置hgweb.config路径的行更改为以下内容(hgweb.config文件所在的位置):

    config =“C:\ Mercurial \ hgweb.config”

  9. 现在,打开浏览器并导航到http://localhost/mercurial/hgweb.cgi(或者您在IIS中设置的相应URL路径),您应该会看到Mercurial Repositories页面。
  10. 另外,请查看Jeremy Skinners blog post。它有点过时,但有一些额外的好步骤,比如为更干净的URL设置URL重写。

答案 1 :(得分: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/。当我最初在这个项目上工作时,我会在心跳中选择这个。

答案 2 :(得分:12)

答案 3 :(得分:11)

答案 4 :(得分:11)

以下是我在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工作的好时机。在名为test.cgi的新Hg文件夹中创建一个文件。粘贴以下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 repo克隆到新目录:https://www.mercurial-scm.org/repo/hg/
  • 将hgwebdir.cgi复制到您的网站目录:c:\ inetpub \ wwwroot \ hg \ from cloned hg repo
  • 编辑文件并更改
application = hgwebdir('hgweb.config')
wsgicgi.launch(application)

application = hgwebdir('c:\inetpub\wwwroot\hg\hgweb.config')
wsgicgi.launch(application)
  • 将Mercurial目录中的Library.zip文件(c:\ Program Files \ Mercurial \)解压缩到您的网站目录c:\ inetpub \ wwwroot \ hg \
  • 将模板目录从c:\ Program Files \ Mercurial \ templates \复制到c:\ inetpub \ wwwroot \ hg \ templates \
  • 在您的网络目录中创建一个名为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

答案 5 :(得分:3)

使用mercurial克隆mercurial存储库:

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

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

答案 6 :(得分:2)

过去一周左右,我一直在为mercurial 1.7.2设置这个设置,为了让它正常工作,我必须做的事情与上面的文章略有不同。

在此发帖,因为谷歌一直把我带回来......

完整说明posted here

我遵循了these instructionsthese (in the source)

的组合

主要区别在于我必须执行"pure python" install of mercurial否则会抱怨丢失的dll,我发现使用python和isapi-wsgi的“python安装程序”非常重要。 (对于经验丰富的python开发人员来说这可能是显而易见的,但我是一个python新手,所以这对我来说是新闻)

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

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

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

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

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

希望这有助于某人...

答案 9 :(得分: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 并享受!

答案 10 :(得分:-1)

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