我正在尝试将 Mercurial 存储库设置为由 IIS 在 Windows Server 2003 下托管。关注 this post我安装了 Python 2.5.4.4 和 Mercurial 1.3,设置了虚拟目录,提取了 library.zip 并创建了 hgwebdir.config。
但是,当我尝试打开 http://hostname/hg/hgwebdir.cgi我收到错误消息“指定的 CGI 应用程序因未返回完整的 HTTP header 集而行为异常。”我尽力而为:
- 检查 IIS 到 .py 和 .cgi 扩展名的映射。我什至尝试使用 FastCGI 但没有成功。
- 在同一目录中创建“Hello World”并检查它是否正常工作。
- 检查了 IUSR、IWAM 和 NETWORK SERVICE 的 Python、IIS 和 repos 目录的读取/执行权限。
- 尝试应用来自 Mercurial mailing list 的两个不同补丁.因为他们都老了,所以我没有成功。
- 安装了 Sysinternals 的 procmon 并检查了请求期间的文件系统错误。除了加载库时 Python 进程中的大量缓冲区溢出结果外,我什么也没发现。
- 尝试将“Content-type: text/html”添加到脚本中。
还有一件事是当我请求不存在的脚本文件(例如/hg/inexist.cgi)时我有同样的错误。没有任何帮助!
最佳答案
还有一些我需要修复的东西:
- 各种 HOWTO 说使用
c:\whatever\Python26\python.exe -u "%s""%s"
而不是使用c:\whatever\Python26\python .exe -u -O -B "%s""%s"
-O 使它也查找 .pyo 文件(不仅仅是 .py 或 .pyc,至少在我的版本中不存在). -B 使其不尝试将找到的 .py 文件编译为 .pyo 文件(由于缺少写入权限而失败) - 我安装了 Python 2.7。 Mercurial 1.6.2 的 .pyo 文件是用 Python 2.6 编译的。这导致了魔数(Magic Number)错误。卸载 2.7 并安装 2.6.5 解决了这个问题。 (如果你在未来的某个时候阅读这篇文章,这一点可能不再相关 - 检查 Mercurial 目录或 TortoiseHg 目录中 DLL 的名称,具体取决于你从哪里获取 library.zip)
- hgwebdir.cgi 现在只是 hgweb.cgi - webdir 已集成到其中
关于python - 使用 IIS 6 托管 Mercurial,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1191136/