繁体   English   中英

Apache / Windows上的Mercurial Server

[英]Mercurial Server on Apache/Windows

我正在寻找信息来设置一个Mercurial Server for Windows(7或XP)与Apache(xampp,如果知道它有用)与推模型,就像在这个问题,但我的团队由5到8组成(不解决)那些在分散的地方工作的人,所以我不认为bitbucket解决方案或任何其他非私人回购。

我认为这篇文章可以解决这个问题,但我之前没有经历任何关于cgi的事情,

有没有人这样做过? 我在哪里可以找到更详细的解释? 提前致谢

[编辑]

我现在收到此错误:脚本标头过早结束:hgwebdir.cgi

日志错误显示“没有名为mercurial的模块”

这是我的hgwebdir.cgi文件

#!c:/python24/python.exe
#
# An example CGI script to export multiple hgweb repos, edit as necessary

# adjust python path if not a system-wide install:
import sys
sys.path.insert(0, "c:/mercurial_library")

# enable importing on demand to reduce startup time
from mercurial import demandimport; demandimport.enable()

# Uncomment to send python tracebacks to the browser if an error occurs:
#import cgitb
#cgitb.enable()

# If you'd like to serve pages with UTF-8 instead of your default
# locale charset, you can do so by uncommenting the following lines.
# Note that this will cause your .hgrc files to be interpreted in
# UTF-8 and all your repo files to be displayed using UTF-8.
#
#import os
#os.environ["HGENCODING"] = "UTF-8"

from mercurial.hgweb.hgwebdir_mod import hgwebdir
import mercurial.hgweb.wsgicgi as wsgicgi
application = hgwebdir('hgweb.config')
wsgicgi.launch(application)

我使用了HgWebDir指令

这是我的httpd.conf片段,用于mercurial网站(略有编辑):

<VirtualHost *:88>
    ServerName hg.example.com
    DocumentRoot c:/apache_sites/hg
    RewriteEngine on

    RewriteRule ^/$ /public [R]
    RewriteRule ^/public(.*) /public/hgwebdir.cgi$1 [L]
    RewriteRule ^/private(.*) /private/hgwebdir.cgi$1 [L]

    # mod_alias alternative (pretty url's)
    <Directory c:/apache_sites/hg >
        Order allow,deny
        Allow from all
        AllowOverride All
        Options ExecCGI
        AddHandler cgi-script .cgi
    </Directory>
    <Location /private/>
        AuthType Digest
        AuthName "hg.example.com"
        AuthDigestProvider file
        AuthUserFile c:/apache_sites/hg/hgusers
        AuthGroupFile c:/apache_sites/hg/hggroup
        AuthDigestDomain /private/
        Require group owner
    </Location>
    <Location /public/>
        AuthType Digest
        AuthName "hg.example.com"
        AuthDigestProvider file
        AuthUserFile c:/apache_sites/hg/hgusers
        AuthGroupFile c:/apache_sites/hg/hggroup
        AuthDigestDomain /public/
        <LimitExcept GET>
            Require group developer
        </LimitExcept>
    </Location>

    LogLevel debug
    ErrorLog "c:/apache/logs/hg-error.log"
    CustomLog "c:/apache/logs/hg-access.log" combined
    LogLevel debug
</VirtualHost>
# vim:se ft=apache:

我还必须为Auth Digest等打开几个模块。

我将hgwebdir.cgi放在public和private文件夹的根目录中,然后将每个hg repos放在repos子文件夹下的相应文件夹下。

Apache身份验证负责我的授权。

然后我只是将hgweb.config文件放在相同的位置,如下所示:

[collections]
repos = repos

[web]
allow_archive = bz2 gz zip
style = gitweb
baseurl = /public

更新的问题

mercurial包需要在PYTHON_PATH上

这个答案提供了更多细节。

John Weldons的回答是正确的,我只想提供一些您可能感兴趣的各种可能性的细节。

hgwebdir只是一个wsgi应用程序,所以你可以像在apache2中使用mod_wsgi的任何其他wsgi应用程序一样运行它。 mod_wsgi也将比cgi执行得更好,因为加载python解释器的开销是一次完成而不是每个请求。

另外,作为一个wsgi应用程序意味着你也可以将其包装在中间件中 ,或者将它挂在更大的网站等的另一个网址上......

例如,假设您正在使用trac (另一个wsgi应用程序)并且您想要在trac和hgwebdir之间共享授权方案,这可以通过将它们放在授权中间件(例如repoze.who)之后来实现。

最后,由于python paste使得构建Web应用程序的篇幅较小,我编写了这段代码片段以通过粘贴启动hgwebdir。

"""
Wsgi wrapper of hgweb that is paste compatible
"""
import os
from mercurial import demandimport
demandimport.enable()
from mercurial.hgweb.hgwebdir_mod import hgwebdir

CONFIG_FILE_KEY = "hgwebdir.config"

def hgweb_paste(global_config, **local_conf):
    """
    looking for a config file setting in global or local
    """
    cfg = global_config
    cfg.update(local_conf)
    config_file = cfg.get(CONFIG_FILE_KEY)
    if config_file and os.path.exists(config_file):
        return hgwebdir(config_file)
    else:
        raise KeyError, "%s not set or %s does not exist" % (CONFIG_FILE_KEY,config_file)

和相应的配置文件部分加载它...

[server:main]
use = egg:Paste#http
host = 0.0.0.0
port = 6543

[app:main]
use = egg:hg.paste#hgweb
hgwebdir.config = %(here)s/hg.config

我发现这篇博文特别有用: http//blog.riverside-software.fr/2011/02/quick-and-easy-setup-of-mercurial.html

这很简单,到了这一点,让我在不到15分钟的时间内完成工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM