2010-08-10 3 views
6

служу доступ ко многим ртутных хранилищ с использованием hgweb, предоставляя им в качестве коллекции:Почему мой сервер hgweb так медленно?

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

Это служит их на локальном хосте/проекты

У меня есть около 30 репозиториев в этом месте, в исходное дерево с множеством других проектов, не связанных с ртутью.

hgweb is действительно неточно реагировать; он занимает около 30 секунд, чтобы предоставить листинг на http://localhost/ и около 30 секунд, чтобы открыть проект, из-за чего больно использовать его для совместного использования.

Как я могу настроить это, чтобы сделать его быстрее?

Я работаю на OSX, если это имеет значение.

+0

Вы пытались использовать 'hgwebdir' вместо этого? – Amber

ответ

5

AFAIK, hgweb сканирует все подкаталоги в записи [collections] в конфигурационном файле. Поскольку у вас есть много несерьюриальных каталогов, он должен выполнять проверку каждого подкаталога каждого из них. Напротив, он может остановить сканирование на верхнем уровне дерева каталогов, содержащего репозиторий Mercurial, потому что он увидит там каталог .hg.

Если вы используете новый Mercurial (после 1.1, это похоже), попробуйте изменить hgweb.config, чтобы использовать раздел [paths], и укажите явные записи для каждого из хранилищ Mercurial.

+1

Это работает как шарм. Я собираюсь добавить свой собственный ответ на этот вопрос, который содержит скрипт, который управляет этим [путями]. –

1

Проблема, вероятно, заключается в том, что сервер рекурсивно рекурсивно репозиционирует в течение каждого запроса. Похоже, у вас там довольно большой каталог, так что это имеет смысл.

Это обозначение будет работать с предпочтительным атрибутом [paths], но я не уверен, поможет ли он атрибуту [collections]. Попробуйте изменить на

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

поэтому он будет искать только один уровень вниз.

Проверить здесь больше на вопрос: https://www.mercurial-scm.org/wiki/HgWebDirStepByStep

Если это не работает, это, безусловно, будет, если вы смените [paths] и использовать * обозначения.

1

Следуя за очень полезным ответом Найла, я понял, что мне нужен инструмент для поддержки этого раздела [путей]. Я в конечном итоге происходит с этим (который использует 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 в Крон каждые 15 минут и гарантирует, что мой hgweb никогда не устаревает.

7

В качестве альтернативы с открытым исходным кодом вы можете использовать RhodeCode http://rhodecode.com, это замена hgweb, полностью написанная на Python.

  • имеет собственный промежуточный слой для обработки запроса ртутного протокола каждого запрос может быть зарегистрирован и засвидетельствована + резьбовой производительность вряд ли сможет hgweb
  • полных прав доступа для каждого проекта чтения/записи/доступ администратора даже на ртутном запросу
  • мако шаблоны позволяет настраивать внешний вид приложения.
  • diffs аннотации и исходный код, все цветные пироги.
  • График распределения ртутных графов и графиков с питанием yui-флота
  • интерфейс администратора для управления правами пользователя и разрешения, а также управления репозиториями.
  • Дополнительные настройки для ртутный сети, (крючки для редактирования из панели администратора!) Также управлять дорожками, архив, удаленные сообщения
  • сценарии резервного копирования можно сделать резервную копию всего приложения и отправить его по УПП в нужное место
  • описания проекта установки и информация внутри встроенного db для простых операций без файловой системы
  • Текст полного поиска по кодам репозитория
  • добавлен кеш с недействительностью при управлении push/repo для высокой производительности и всегда до даты.
  • RSS/Atom-каналы, Gravatar поддержка
  • основана на пилонах 1,0/SQLAlchemy