代码之家  ›  专栏  ›  技术社区  ›  Chris R

为什么我的hgweb服务器这么慢?

  •  6
  • Chris R  · 技术社区  · 15 年前

    我正在使用hgweb访问许多mercurial存储库,并将它们作为一个集合提供:

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

    这将在localhost/projects上提供它们

    hgweb是 真正地 反应迟钝;提供一个列表大约需要30秒 http://localhost/

    我如何调整它使之更快?

    我在OSX上运行,如果有区别的话。

    4 回复  |  直到 15 年前
        1
  •  5
  •   Niall C.    15 年前

    hgweb 将扫描 [collections] .hg 目录在那里。

    如果您使用的是较新的Mercurial(1.1之后的版本),请尝试更改 hgweb.config 使用 [paths] 节,并为每个Mercurial存储库提供显式条目。

        2
  •  7
  •   marcinkuzminski    9 年前

    作为一个开源的替代方案,您可以使用RhodeCode http://rhodecode.com 它完全是用Python编写的。

    • 它有自己的中间件来处理mercurial协议请求每个请求都可以被记录和验证+线程化性能不太可能影响Web
    • 即使在mercurial请求下,每个项目的读/写/管理访问的完全权限
    • diff注释和源代码都用pygments着色。
    • 汞枝图与yui-flot幂图
    • 用于执行用户/权限管理以及存储库管理的管理界面。
    • mercurial web的其他设置(可从管理面板编辑)还可以管理路径、存档、远程邮件
    • 在内置数据库中设置项目描述和信息,以便进行简单的非文件系统操作
    • 在推送/恢复管理中添加了失效缓存,以实现高性能和始终保持最新的数据。
    • rss/atom订阅源,gravatar支持
    • 基于pylons 1.0/sqlalchemy
        3
  •  1
  •   Chris R    15 年前

    configobj 由M。福尔德。

    #!/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()
    

        4
  •  1
  •   Vadim Kotov First Zero    8 年前

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

    此符号适用于首选 [paths] 但我不确定这是否有助于 [collections] 属性。尝试更改为

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

    所以它只能向下搜索一级。

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

    如果这不起作用,它肯定会,如果你改变 使用 * 符号。

    推荐文章