Почему мой сервер hgweb такой медленный? - PullRequest
6 голосов
/ 11 августа 2010

Я предоставляю доступ ко многим ртутным репозиториям, используя hgweb, предоставляя их в виде коллекции:

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

Это обслуживает их в localhost / projects

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

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

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

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

Ответы [ 4 ]

7 голосов
/ 20 августа 2010

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

  • имеет собственное промежуточное ПО для обработки запроса по протоколу Mercurial. Каждый запрос может быть зарегистрирован и аутентифицирован + многопоточная производительность вряд ли hgweb
  • полных разрешений для каждого проекта на чтение / запись / доступ администратора даже по ртутному запросу
  • шаблоны mako позволяют настроить внешний вид приложения.
  • Различаются аннотации и исходный код, раскрашенные фрагментами.
  • граф ветвей ртути и графы на основе yui-flot
  • интерфейс администратора для выполнения управления пользователями / разрешениями, а также управления хранилищем.
  • Дополнительные настройки для Mercurial Web (хуки, редактируемые из админ-панели!), А также управление путями, архивом, удаленными сообщениями
  • Сценарии резервного копирования могут выполнять резервное копирование всего приложения и отправлять его по scp в нужное место
  • настройка описаний проектов и информации внутри встроенной базы данных для простых операций, не связанных с файловой системой
  • Полный текст поиска по кодам репозитория
  • добавлен кэш с аннулированием при управлении push / repo для высокой производительности и всегда актуальных данных.
  • rss / подача атомов, поддержка граватара
  • на основе пилонов 1,0 / sqlalchemy
5 голосов
/ 11 августа 2010

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

1 голос
/ 12 августа 2010

В ответ на очень полезный ответ Найла выше, я понял, что мне нужен инструмент для поддержки этого раздела [пути].Я закончил с этим (который использует configobj от M. Foord.

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

Этот скрипт запускается эквивалентом cron OS X каждые 15 минут и гарантирует, что мой hgweb никогда не получитустарел.

1 голос
/ 11 августа 2010

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

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

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

, чтобы выполнить поиск только на один уровень вниз.

Для получения дополнительной информации о проблеме обратитесь к этой ссылке: https://www.mercurial -scm.org / wiki / HgWebDirStepByStep

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

...