Ответ Джона Уэлдона верен, я просто хотел предоставить небольшую информацию о широком спектре возможностей, которые могут вас заинтересовать.
hgwebdir - это просто wsgi приложение, поэтому вы можете запустить его как любое другое приложение wsgi, используя mod_wsgi в apache2. mod_wsgi также будет работать лучше, чем cgi, поскольку накладные расходы на загрузку интерпретатора python выполняются один раз, а не для каждого запроса.
Кроме того, благодаря тому, что приложение wsgi означает, что вы также можете обернуть его в middleware или повесить его на другой URL более крупного веб-сайта и т. Д ...
Например, допустим, вы используете trac (другое приложение wsgi) и хотите разделить схему авторизации между trac и hgwebdir, это можно сделать, поместив их обоих за промежуточное ПО авторизации, например repoze.who например.
Наконец, поскольку python paste позволяет создавать веб-приложения из небольших кусков, я написал этот фрагмент кода, чтобы запустить hgwebdir с помощью paste.
"""
Wsgi wrapper of hgweb that is paste compatible
"""
import os
from mercurial import demandimport
demandimport.enable()
from mercurial.hgweb.hgwebdir_mod import hgwebdir
CONFIG_FILE_KEY = "hgwebdir.config"
def hgweb_paste(global_config, **local_conf):
"""
looking for a config file setting in global or local
"""
cfg = global_config
cfg.update(local_conf)
config_file = cfg.get(CONFIG_FILE_KEY)
if config_file and os.path.exists(config_file):
return hgwebdir(config_file)
else:
raise KeyError, "%s not set or %s does not exist" % (CONFIG_FILE_KEY,config_file)
И соответствующая часть файла конфигурации для его загрузки ...
[server:main]
use = egg:Paste#http
host = 0.0.0.0
port = 6543
[app:main]
use = egg:hg.paste#hgweb
hgwebdir.config = %(here)s/hg.config