2010-08-10 32 views
6

jestem obsługujących dostęp do wielu rtęci repozytoriów korzystających hgweb, dostarczając je jako zbiór:Dlaczego mój serwer hgweb jest tak wolny?

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

Służy je na localhost/projektów

mam około 30 repozytoria w tym miejscu, w drzewo źródłowe z dużą liczbą innych projektów zarządzanych bez użycia rtęci.

hgweb to naprawdę wolno reagować; wyświetlenie wpisu pod numerem http://localhost/ trwa około 30 sekund, a otwarcie projektu zajmuje około 30 sekund, co sprawia, że ​​używanie go do udostępniania jest bolesne.

Jak mogę to dostroić, aby przyspieszyć działanie?

Używam systemu OSX, jeśli to robi różnicę.

+0

Czy próbowałeś za pomocą 'hgwebdir' zamiast? – Amber

Odpowiedz

5

AFAIK, hgweb skanuje wszystkie podkatalogi wpisu [collections] w pliku konfiguracyjnym. Ponieważ masz tam wiele nie-Mercurialnych katalogów, musisz zrobić skan każdego podkatalogu każdego z nich. W przeciwieństwie do tego może zatrzymać skanowanie na najwyższym poziomie drzewa katalogów zawierającego repozytorium Mercurial, ponieważ zobaczy tam katalog .hg.

Jeśli używasz nowszego Mercurial (po wersji 1.1, wygląda na to), spróbuj zmienić hgweb.config, aby użyć sekcji [paths] i podać jawne wpisy dla każdego z repozytoriów Mercurial.

+1

Działa to jak urok. Zamierzam dodać własną odpowiedź na to pytanie, która zawiera skrypt zarządzający sekcją [paths]. –

1

Problem polega prawdopodobnie na tym, że serwer szuka rekurencyjnie repo podczas każdego żądania. Wygląda na to, że masz dość duży katalog, więc to ma sens.

Ta notacja będzie działać z preferowanym atrybutem [paths], ale nie jestem pewien, czy to pomoże atrybutowi [collections]. Spróbuj zmienić na:

, aby przeszukać tylko jeden poziom w dół.

Sprawdź tutaj bardziej na kwestii: https://www.mercurial-scm.org/wiki/HgWebDirStepByStep

Jeśli to nie zadziała to na pewno będzie, jeśli zmieni się [paths] i użyć notacji *.

1

Podążając za bardzo pomocną odpowiedzią Nialla, zdałem sobie sprawę, że potrzebuję narzędzia do utrzymania tej sekcji [ścieżek]. Skończyło się dzieje z tym (który używa 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() 

Skrypt ten jest prowadzony przez odpowiednik OS X z cron co 15 minut i zapewnia, że ​​moja hgweb nigdy się nieaktualne.

7

Jako alternatywa open-source możesz użyć RhodeCode http://rhodecode.com to zastępstwo hgweb napisane w całości w Pythonie.

  • ma swój własny middleware obsłużyć rtęciowego żądania protokołu każde żądanie mogą być rejestrowane i uwierzytelniane + gwintowany wydajność mało prawdopodobne, aby hgweb
  • pełne uprawnienia na projekt odczytu/zapisu/dostępu administratora nawet na mercurial życzenie
  • templates mako pozwala dostosować wygląd i styl aplikacji.
  • Adnotacje różnic i kod źródłowy wszystkie zabarwione jednostkami.
  • Wykres gałęzi rtęci i wykresy zasilane yui-flot
  • Interfejs administracyjny do wykonywania zarządzania użytkownikami/uprawnieniami, a także zarządzania repozytorium.
  • Dodatkowe ustawienia dla mercurial internecie (haki edycji z panelu administratora!) Również zarządzać ścieżkami, archiwizowanie wiadomości zdalnych
  • skrypty tworzenia kopii zapasowych można zrobić kopię zapasową całej aplikacji i wysłać go przez SCP do wybranej lokalizacji
  • opisy projektów setup i informacje wewnątrz wbudowanej bazy db dla łatwych, nieobsługiwanych plików systemowych
  • Pełny tekst wyszukiwania kodów repozytoriów
  • dodano pamięć podręczną z unieważnieniem w zarządzaniu push/repo dla uzyskania wysokiej wydajności i zawsze aktualnych danych.
  • kanały RSS/Atom, gravatar wsparcie
  • oparte na pylonach 1,0/sqlalchemy
Powiązane problemy