2010-08-10 34 views
6

我服务了访问使用hgweb许多水银库,为他们提供一个集合:为什么我的hgweb服务器如此之慢?

[collections] 
/home/me = /home/me/projects 

这为他们服务了位于localhost /项目

我有大约30个仓库在该位置,在源树与其他一些非mercurial管理的项目相当。

hgweb是真的响应速度慢;大约需要30秒来提供http://localhost/的列表以及大约30秒钟的时间来打开一个项目,这使得使用它来共享是件痛苦的事情。

我该如何调整它使其更快?

我在OSX上运行,如果它有所作为。

+0

你试过用'hgwebdir'呢? – Amber 2010-08-10 23:18:53

回答

5

AFAIK,hgweb将在其配置文件中扫描[collections]条目的所有子目录。由于你有很多非Mercurial目录,它必须扫描每个目录的每个子目录。相反,它可以在包含Mercurial存储库的目录树顶层停止扫描,因为它将在那里看到.hg目录。

如果您使用的是较新的Mercurial(1.1之后,它看起来像),尝试改变hgweb.config使用[paths]部分,而是和每个水银库提供明确的条目。

+1

这工作就像一个魅力。我将为此问题添加自己的答案,其中包含管理此[路径]部分的脚本。 – 2010-08-12 02:14:53

1

问题可能是服务器在每次请求期间递归地搜索repos。听起来你有一个非常大的目录,所以这是有道理的。

此表示法可与首选的[paths]属性一起使用,但我不确定它是否有助于[collections]属性。尝试更改为

[collections] 
/home/me = /home/me/projects/* 

因此它只会搜索一个级别。

检查这里查看更多关于这个问题: https://www.mercurial-scm.org/wiki/HgWebDirStepByStep

如果不工作肯定会,如果你改变[paths]并使用*符号。

1

跟上Niall的非常有用的答案,上面,我意识到我需要一个工具来维护这个[路径]部分。我结束了这是怎么回事(这由M. Foord使用configobj

#!/usr/bin/env python 
from __future__ import print_function 

import os 

from configobj import ConfigObj 

hgweb_path = os.path.join(os.path.expanduser("~"), "Library", "Preferences", "hgweb.config") 
projects = os.path.join(os.path.expanduser("~"), "projects") 

config = ConfigObj(hgweb_path) 

paths = [] 

def add_mercurial(arg, dirname, names): 
    if '.hg' in names: 
    paths.append(dirname[len(projects) + 1:]) 

os.path.walk(projects, add_mercurial, None) 

config['paths'] = {} 

for path in paths: 
    config['paths']["projects/" + path] = os.path.join(projects, path) 

config.write() 

此脚本由OS X中的等价物的cron每15分钟运行,并确保我的hgweb永远不会过时的。

7

作为一个开源的替代品,你可以使用RhodeCode http://rhodecode.com这是完全用Python编写的hweweb替换。

  • 有它自己的中间件处理善变的协议要求每个请求可以被记录和验证+线程性能不大可能hgweb甚至善变要求
  • 鲭模板每个项目的读/写/管理权限
  • 完全权限让您自定义应用程序的外观和感觉。
  • 差异注释和源代码都由pygments着色。
  • mercurial分支图和yui-flot动力图
  • 用于执行用户/权限管理以及存储库管理的管理界面。
  • 对于善变的网络附加设置(钩从管理面板可编辑的!)还管理路径,归档,远程信息
  • 备份脚本可以做整个应用程序的备份,并将其发送过SCP到所需的位置
  • 安装项目的说明和信息内置分贝为简单,非文件系统操作
  • 存储库代码上的全文搜索文本
  • 添加缓存无效推/回购管理高性能和总是最新的数据。
  • RSS/Atom供稿的gravatar支持
  • 基于塔1.0/SQLAlchemy的
相关问题