Хостинг Mercurial на IIS7 - PullRequest
10 голосов
/ 19 мая 2010

Обратите внимание, что это, возможно, лучше всего подходит на serverfault.com, но поскольку речь идет о размещении репозитория исходного кода программиста, я не совсем уверен. Сначала я пишу здесь, полагая, что он будет перенесен в случае необходимости.

Я пытаюсь разместить клоны моих репозиториев Mercurial на моем собственном сервере (у меня есть основной репозиторий где-то еще), и я пытаюсь настроить Mercurial под IIS.

Я следовал инструкции здесь , но я получаю сообщение об ошибке .

Решено : Подробности см. В нижней части этого вопроса.

Сообщение об ошибке:

mercurial.error.RepoError: хранилище / путь / к / repo / или / config не найден

Вот что я сделал.

  1. Я установил Mercurial 1.5.2
  2. Я создал c: \ inetpub \ hg
  3. Я скачал источник hg в соответствии с инструкциями на веб-странице и скопировал файл hgweb.cgi в папку c: \ inetpub \ hg ( примечание, на веб-странице написано hgwebdir.cgi, но этот конкретный файл не существует , hgweb.cgi однако, может ли это быть источником проблемы? )
  4. Я добавил hgweb.config со следующим содержимым:

    [paths]
    repo1 = C:/hg/**
    [web]
    style = monoblue
    
  5. Я создал c: \ hg, создал тест подкаталога и создал внутри него хранилище

  6. Я установил python 2.6.5, последнюю версию 2.6 с веб-сайта (на веб-странице указано, что мне нужно установить правильную версию, или я получу конкретное сообщение об ошибке, поскольку я не получаю сообщение об ошибке, которое выглядит удаленно, как упомянутый выше, я предполагаю, что 2.6.5 не проблема)
  7. Я добавил новый виртуальный хост hg.vkarlsen.no, указав его на c: \ inetpub \ hg
  8. Для этого хоста я добавил отображение сценариев в разделе «Сопоставления обработчиков», сопоставляя * .cgi с c:\python26\python.exe -u %s %s в соответствии с инструкциями на сайте.

Затем я проверил его, перейдя к http://hg.vkarlsen.no/hgweb.cgi,, но получил сообщение об ошибке.

Чтобы упростить тестирование, я перешел в командную строку, перешел по адресу c: \ inetpub \ hg и выполнил следующую команду (сообщение об ошибке является частью текста ниже):

C:\inetpub\hg>c:\python26\python.exe -u hgweb.cgi
Traceback (most recent call last):
  File "hgweb.cgi", line 16, in <module>
    application = hgweb(config)
  File "mercurial\hgweb\__init__.pyc", line 12, in hgweb

  File "mercurial\hgweb\hgweb_mod.pyc", line 30, in __init__

  File "mercurial\hg.pyc", line 82, in repository

  File "mercurial\localrepo.pyc", line 2221, in instance

  File "mercurial\localrepo.pyc", line 62, in __init__

mercurial.error.RepoError: repository /path/to/repo/or/config not found

Кто-нибудь знает, что мне нужно посмотреть, чтобы это исправить?


Редактировать : Хорошо, я думаю, что мне удалось приблизиться на шаг ближе к решению, но я все еще в замешательстве.

Я понял, что файл .cgi - это файл сценариев Python, а не что-то компилируемое, поэтому я открыл его для редактирования, и в нем сидели следующие строки:

# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "/path/to/repo/or/config"

Так что это был мой источник для конкретного сообщения об ошибке.

Если я изменю строку на эту:

config = "c:\\hg\\test"

Затем я могу перемещаться по пустому хранилищу через веб-интерфейс Mercurial.

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

config = "c:\\inetpub\\hg\\hgweb.config"

Но тогда я получаю следующее сообщение об ошибке:

mercurial.error.Abort: c:\inetpub\hg\hgweb.config: not a Mercurial bundle file
Exception ImportError: 'No module named shutil' in <bound method bundlerepository.__del__
of <mercurial.bundlerepo.bundlerepository object at 0x0260A110>> ignored

Ничего из того, что я пробовал для переменной config, похоже, не работает:

config = "hgweb.config"
config = "c:\\hg\\hgweb.config"
  • различные другие варианты, которые я не помню.

Так, все еще в тупике, указывает на кого-нибудь?

Надеюсь, этот вопрос даст другим некоторую информацию, если они озадачены, как и я.

1 Ответ

7 голосов
/ 02 сентября 2010

Мне пришлось отредактировать файл hgweb.cgi:

from:  from mercurial.hgweb import hgweb, wsgicgi
       application = hgweb(config)

to:    from mercurial.hgweb import hgweb, hgwebdir, wsgicgi
       application = hgwebdir(config)

Обратите внимание на добавленные там части hgwebdir. Вот мой файл hgweb.config, расположенный в том же каталоге, что и файл hgweb.cgi:

[collections]
C:/hg/ = C:/hg/

[web]
style = gitweb

Теперь он успешно обслуживает мои репозитории.

...