IIS 7.5上的Mercurial和hgweb - python错误

时间:2010-12-04 19:01:04

标签: python iis mercurial hgweb

我正在尝试让Mercurial在IIS 7.5(Win 7 x64)上托管并继续遇到我似乎无法解决的错误。

我在这里关注了Jeremy Skinners教程:Mercurial on IIS7

而不是hgwebdir,我使用hgweb,因为我正在使用Mercurial 1.7.2

我已经安装并运行了python。我在http://localhost/hg - >为Mercurial设置了一个IIS应用程序。在目录c:\ inetpub \ wwwroot \ hg

我将模板目录放入c:\ inetpub \ wwwroot \ hg 我将library.zip文件解压缩到c:\ inetpub \ wwwroot \ hg

当我访问该网站时,出现错误 - >文件“C:\ inetpub \ wwwroot \ hg \ hgweb.cgi”,第15行,来自mercurial import demandimport; demandimport.enable()ImportError:没有名为mercurial的模块“。

搜索此错误时,我找到了以下答案:https://stackoverflow.com/questions/2123798/

根据接受的答案,我将hgweb.cgi更改为:

#!c:/python/python26/python.exe
#
# An example hgweb CGI script, edit as necessary
# See also https://www.mercurial-scm.org/wiki/PublishingRepositories

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

# Uncomment and adjust if Mercurial is not installed system-wide:
import sys; sys.path.insert(0, "c:\inetpub\wwwroot\hg")

# 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('c:\inetpub\wwwroot\hg\hgweb.config')
wsgicgi.launch(application)

这样做之后,我仍然得到同样的错误。我不知道还能做什么。任何帮助将不胜感激。

Edi 1:根据请求c:\ inetpub \ wwwroot \ hg的屏幕截图:My Hg directory

4 个答案:

答案 0 :(得分:15)

在过去一周左右的时间里,我一直在努力解决这个问题。

在我看来,他们最近对于mercurial在IIS中的工作方式做了一些重大更改,因此上面链接到Jeremy Skinners教程将对1.7.2有疑问

这是more recent link 我发现我必须做一些不同的事情。

这些说明适用于1.7.x,如果您使用的是1.8.x,请务必阅读以下Ethan的评论!

我按照the comments of /contrib/win32/hgwebdir_wsgi.py中的说明操作。

  • 安装Python 2.6.6

  • 将Python添加到系统PATH(制作 生活更轻松)

  • 安装pywin32 v214(使用 Python安装程序,重要!)(注意 这是针对python构建的 2.6)

  • 安装isapi_wsgi

  • download the mercurial source package
    提取,然后运行

    python setup.py --pure build_py -c -d . build_ext -i build_mo --force
    python setup.py --pure install --force
    
  • 将/ contrib / win32中的hgwebdir_wsgi.py复制到您要托管它的文件夹中。

  • 在您要托管的文件夹中创建一个文件hgweb.config。添加内容

    [paths]
    yourRepoName = c:\yourRepoLocation
    
  • 编辑hgwebdir_wsgi.py指向 hgweb.config。如果是hg,path_prefix为0 是网站的根源。如果 你把它放在vdir 1深处, 然后是1等等。

  • 运行python hgwebdir_wsgi.py进行创建 isapi dll _hgwebdir_wsgi.dll。 控制台应打印出来 “安装完成”

  • 在IIS中创建您的应用程序池(没有 托管代码)

  • 使用该文件夹创建您的网站 设置为相同的文件夹 hgwebdir_wsgi.py

  • 添加Module类型的处理程序,使用“*” 作为映射,选择 _hgwebdir_wsgi.dll作为可执行文件,选择isapimodule作为类型, Mercurial-ISAPI作为名称(尽管如此) 名字并不重要)

  • 编辑的功能权限 模块允许执行。

web.config(前两个步骤):

<system.webServer>
<handlers accessPolicy="Read, Execute, Script">
<add name="Mercurial-Isapi" path="*" verb="*" modules="IsapiModule" scriptProcessor="C:\inetpub\hgweb\_hgwebdir_wsgi.dll" resourceType="Unspecified" />
</handlers>
</system.webServer>

毕竟,我能够让它发挥作用。

最后一件事,我确实将MFC71.dll复制到了windows / system32,虽然我不确定是否有必要 http://python.net/crew/skippy/win32/

我认为我在这里和上面的链接之间的主要区别在于我做了“纯python”mercurial安装,虽然我是一个完整的python新手,所以我不确定。我还为pywin和isapi_wsgi做了“python安装”,而不是普通的windows msis。

答案 1 :(得分:3)

Adam Boddington编写了一个现在有效的更新安装说明:http://stackingcode.com/blog/2011/02/24/running-a-mercurial-server-on-iis-7-5-windows-server-2008-r2

答案 2 :(得分:3)

我使用当前版本的Mercurial(1.8.x)以及当前版本的Python(2.7)写出了up to date instructions on how to setup a mercurial repository on IIS7

这对您有用,如果您使用它来投票(或向下),我会感激。

答案 3 :(得分:1)

之前我确实遇到过很多错误。 卸载所有python,pywin32,isapi_wsgi,如上所述卸载它。 它起到了轻而易举的作用。 LUC