Использование Mercurial и Apache - PullRequest
0 голосов
/ 04 января 2011

Я использую Mercurial 1.7 и Apache 2.2.3.Я пытаюсь использовать скрипт hgwebdir.cgi для аутентификации и обслуживания моих репозиториев, которые расположены по адресу /var/lib/mercurial-server/repos.

Хотя аутентификация работает, веб-страница не показывает никакихиз репозиториев.

Это мой /var/www/cgi-hg/hgwebdir.cgi:

config = "/var/lib/mercurial-server/repos/"
import sys; sys.path.insert(0, "/usr/lib64/python2.4/")
import cgitb; cgitb.enable()

from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb import hgweb, wsgicgi
application = hgweb(config)
wsgicgi.launch(application)

Это мой /var/www/cgi-hg/hgwebdir.config:

[collections]
/var/lib/mercurial-server/repos=/var/lib/mercurial-server/repos

[web]
allow_push = *
style = gitweb
push_ssl = False

Это мой /etc/httpd/conf/httpd.conf (части, где были внесены изменения):

DocumentRoot "/var/www/cgi-hg"

<Directory />
 Options ExecCGI FollowSymLinks
 AllowOverride None
 Order allow,deny
 Allow from all
</Directory>

<Directory "/var/www/cgi-hg">
 Options ExecCGI Indexes FollowSymLinks
 AllowOverride None
</Directory>

DirectoryIndes index.html index.html.var hgwebdir.cgi

ScriptAlias /hg "/var/www/cgi-hg/hgwebdir.cgi"

<Location /hg>
 AuthType Basic
 AuthName "Login Required"
 AuthUserFile /usr/local/etc/users
 Require valid-user
</Location>

Использование config = "/ var / lib / mercurial-server / repos / "и config =" /var/hg/hgwebdir.config "в hgwebdir.cgi дает мне пустую страницу хранилища.Несмотря на то, что в /var/hg/.

НЕТ hgwebdir.config, использование config = "/var/www/cgi-hg/hgwebdir.config" дает мне страницу, показывающую OSError.Часть страницы показывает:

/var/www/cgi-hg/hgwebdir.cgi
(highlighted) 22 application = hgweb(config)
application undefined, hgweb = <function hgweb>, config = '/var/www/cgi-hg/hgwebdir.config'

/usr/lib64/python2.4/site-packages/mercurial/hgweb/__init__.py in hgweb(config='/var/www/cgi-hg/hgwebdir.config', name=None, baseui=None)
(highlighted) 26 return hgwebdir_mod.hgwebdir(config, baseui=baseui)
...

Я также заметил, что всякий раз, когда я перезагружаю свой httpd, я получаю 2 сообщения:

Starting httpd: [date time] [warn] The ScriptAlias directive in /etc/httpd/conf/httpd.conf at line 570 will probably never match because it overlaps an earlier ScriptAliasMatch.
httpd: Could not reliably determine the server's fully qualified domain name, using <IP address> for ServerName

В моем httpd.conf нет ScriptAliasMatch.

Когда я указываю своему браузеру на / hg, меня просят пройти аутентификацию, затем я получаю либо пустую страницу репозитория, либо ошибки Python, в зависимости от того, какую конфигурацию я использую в hgwebdir.cgi.

Если я использую «hg serve --webdir-conf /var/www/cgi-hg/hgwebdir.config», все мои репозитории отображаются правильно.

Я очень плохо знаком с apache,так что я уверен, что понял что-то не так.Пожалуйста, сообщите.

Спасибо.

1 Ответ

0 голосов
/ 04 января 2011

Я не знаю о предупреждении ScriptAlias, но я думаю, что строка вашего /var/www/cgi-hg/hgwebdir.cgi файла должна быть изменена с текущей:

config = "/var/lib/mercurial-server/repos/"

до

config = "/var/www/cgi-hg/hgwebdir.config"

Когда вы обслуживаете одно хранилище, это путь к этому хранилищу, а когда вы обслуживаете несколько файлов, это путь к файлу конфигурации hgweb.

Вы можете убедиться, что он читает ваш файл hgwebdir.config, изменив style на что-то очень заметное, например coal (темно-серый). Если вы не видите это изменение, оно просто работает со значениями по умолчанию.

Как только вы приступите к работе, вы должны также немного заблокировать настройку Apache. DocumentRoot обычно отличается от каталога, содержащего CGI (вы не хотите, чтобы люди троллили вокруг областей за пределами /hg), и аналогично вам не следует включать параметр ExecCGI для всей файловой системы (Directory / ) как правило.

Сначала убедитесь, что он действительно читает ваш файл hgwebdir.config, а затем работайте над этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...