【问题标题】:Hosting Mercurial HG via VisualSVN Server通过 VisualSVN 服务器托管 Mercurial HG
【发布时间】:2017-06-19 21:39:30
【问题描述】:

我尝试使用 Scriptalias 托管 Mercurial HG 存储库。

ScriptAlias /hg/ "htdocs/hgwebdir.cgi"

如果我使用 Chrome,它会显示 cgi 文件的内容。在 IE 中它会渲染,但不会显示图像和链接。在这两种情况下,我想要显示的存储库都不会显示。

有没有人设法让这个与 VisualSVN 一起工作?如果我有 Windows 身份验证和 https,这也可以吗?

【问题讨论】:

  • 我已经尝试了两天了!!希望我有一个答案。
  • ScriptAlias 的最后一个参数必须使用绝对路径。

标签: mercurial hosting cgi visualsvn


【解决方案1】:

这是使用 mod_wsgi(快!)的替代设置,组合存储库目录,您可以从 VisualSVN 服务器 GUI 管理 Mercurial 存储库级别访问。

下载mod_wsgi.so for Apache 2.2 Win32并放入“C:\Program Files\VisualSVN Server\bin”。

将 hgwebdir.wsgi 从 Mercurial 安装(contrib 目录)复制到“C:\Program Files\VisualSVN Server\”。它应该看起来像这样:

import sys
sys.path.insert(0, "C:\Program Files\Mercurial\library")
from mercurial.hgweb.hgwebdir_mod import hgwebdir
application = hgwebdir('hgweb.config')

创建配置文件“C:\Program Files\VisualSVN Server\hgweb.config”。

[paths]
/ = c:/Repositories/*

将以下内容粘贴到“C:\Program Files\VisualSVN Server\conf\httpd-custom.conf”中。您应该根据 httpd.conf 的部分调整 Auth* 值。

LoadModule wsgi_module bin/mod_wsgi.so
WSGIScriptAlias /hg "hgwebdir.wsgi"

<Location /hg/>
    AuthName "Mercurial Repositories"
    AuthType VisualSVN
    AuthzVisualSVNAccessFile "C:/Repositories/authz-windows"
    AuthnVisualSVNBasic on
    AuthnVisualSVNIntegrated off
    AuthnVisualSVNUPN Off

    SVNParentPath "C:/Repositories/"

    require valid-user
</Location>

创建 Mercurial 存储库:

hg init C:\Repositories\hgtest

您现在应该能够通过浏览器访问 /hg,并通过 VisualSVN 服务器工具管理存储库级别的授权。

【讨论】:

  • 我想我已经很接近让这个工作了,但是我收到一个错误“处理 WSGI script mercurial”和“文件“mercurial\\hgweb\\hgwebdir_mod.pyc”,第 103 行, 在 call' 中。最新的 Mecurial 1.5.1 是针对 Python 2.6 编译的吗?
  • 在发表我的最后一条评论 5 秒后,我终于让它工作了!根据先前的答案,将 Templates 文件夹复制到 library 文件夹。要遵循的额外步骤: 1. 将 Mercurial 安装中的 libraries.zip 解压缩到名为 library 的文件夹中。 2. 将模板文件夹复制到库文件夹。 3. 确保安装 Python 2.6。谢谢!
  • 仅供参考:自 3.3.0 版起包含在 VisualSVN 服务器发行版中的 mod_wsgi 模块:visualsvn.com/server/changes/#v3.3.0
【解决方案2】:

假设您已安装并运行 Python 2.6,以下是我采取的步骤。

获取为Apache 2.2 Win32构建的“mod_cgi.so”并将其放置在“C:\Program Files\VisualSVN Server\bin”中。

将以下内容粘贴到“C:\Program Files\VisualSVN Server\conf\httpd-custom.conf”中

LoadModule cgi_module bin/mod_cgi.so
ScriptAliasMatch ^/hg(.*) "cgi-bin/hgweb.cgi$1"

创建 cgi-bin 目录,“C:\Program Files\VisualSVN Server\cgi-bin”。并将hgweb.cgi 放入其中。确保它看起来类似于以下内容:

#!c:/Python26/python.exe -u

import sys
sys.path.insert(0, "C:\Program Files\Mercurial\library")

import cgitb
cgitb.enable()

from mercurial.hgweb.hgwebdir_mod import hgwebdir
import mercurial.hgweb.wsgicgi as wsgicgi

application = hgwebdir('hgweb.config')
wsgicgi.launch(application)

在 cgi-bin 目录中创建一个名为 hgweb.config 的文件。

[paths]
/ = c:/HgRepositories/*

将“C:\Program Files\Mercurial\templates”复制到“C:\Program Files\Mercurial\library\templates”。

创建“C:\HgRepositories”文件夹和“hg init c:\HgRepositories\test”。

重启 VisualSVN 服务器,打开浏览器,享受 Mercurial 存储库。

【讨论】:

    【解决方案3】:

    从 Mercurial 1.6 版开始,hgwebdir.wsgi 脚本具有 已与 hgweb.wsgi 脚本统一。 hgwebdir.wsgi 在哪里 在这些方向中提到,您可以替换 hgweb.wsgi 改为脚本。

    https://www.mercurial-scm.org/wiki/modwsgi

    【讨论】:

      【解决方案4】:

      您可以在不同的身份验证和 https 模块后面运行 hgwebdir,只要您的网络服务器在 REMOTE_USER 变量被移交给 CGI 之前处理它们。

      我不知道visualsvn,但你的ScriptAlias 看起来很像Apache。 .cgi 需要AddHandler 行吗?

      【讨论】:

      • AddHandler 行是否应该是在常规 apache 服务器上执行 CGI 所需的全部内容?
      • 在 Apache 中,您可以使用“ExecCGI”、“AddHandler cgi-script .cgi”和“ScriptAlias”授权执行文件。我使用后两个。
      猜你喜欢
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多