Хостинг Mercurial на IIS7
Обратите внимание, что это может быть лучше всего подходит для serverfault.com, но так как речь идет о размещении репозитория исходного кода программиста, я не совсем уверен. Сначала я пишу здесь, полагая, что он будет перенесен в случае необходимости.
Я пытаюсь разместить клоны моих репозиториев Mercurial на моем собственном сервере (у меня есть основной репозиторий где-то еще), и я пытаюсь настроить Mercurial под IIS.
Я следовал за руководством здесь , но я получаю сообщение об ошибке.
Решено: подробности смотрите в нижней части этого вопроса.
Сообщение об ошибке:
mercurial.error.RepoError: хранилище / путь / к / репо / или /config не найден
Вот что я сделал.
- Я установил Mercurial 1.5.2
- Я создал c:\inetpub\hg
- Я загрузил исходный код hg в соответствии с инструкциями на веб-странице и скопировал файл hgweb.cgi в папку c:\inetpub\hg (обратите внимание, на веб-странице написано
hgwebdir.cgi
, но этот конкретный файл не существует,hgweb.cgi
однако может ли это быть источником проблемы?) Я добавил hgweb.config со следующим содержимым:
[paths] repo1 = C:/hg/** [web] style = monoblue
Я создал c:\hg, создал тест подкаталога и создал внутри него хранилище
- Я установил python 2.6.5, последнюю версию 2.6 с веб-сайта (на веб-странице указано, что мне нужно установить правильную версию, или я получу конкретное сообщение об ошибке, поскольку я не получаю сообщение об ошибке, которое удаленно напоминает упомянутое Я предполагаю, что 2.6.5 не проблема)
- Я добавил новый виртуальный хост hg.vkarlsen.no, указав его на c:\inetpub\hg
- Для этого хоста я добавил сопоставление сценариев в разделе "Сопоставления обработчиков", сопоставляя *.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 ответ
В итоге мне пришлось отредактировать файл 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
Это теперь успешно обслуживает мои репозитории.