После того, как Бенджамин указал на HTTP-сервисы CGI-скриптов, я решил попробовать их и смог получить репозиторий, размещенный через HTTP. The Redbook, с которым связался Беньямин, так же, как и две статьи в Mercurial wiki. Один, который описывает Mercurial publishing в целом, а другой содержит инструкции step by step для настройки сценария CGI HgWebDir.
Эти инструкции не были полностью надежными, хотя мне пришлось немного совать. Скорее всего, поскольку я запускаю 64-битную Vista. Ниже приведены инструкции о том, что я сделал. Теперь, когда я сделал это, как только я, вероятно, сделаю что-то в другом порядке, не учитывайте эти пошаговые инструкции.
Mercurial
Сначала я приобрел Mercurial бинарник http://mercurial.berkwood.com/ который был установлен в d:\dev\Mercurial
. Я создал репозиторий для тестирования под d:\dev\testRepo
репозиторием, используя hg init
. В файле d:\dev\Mercurial\library.zip
содержатся файлы библиотеки Mercurial, необходимые для сценария CGI, поэтому они были извлечены до d:\dev\Mercurial\library
. Что-то сначала смутило меня в том, что когда я открыл файл zip, я получил сообщение об ошибке и не увидел никакого содержимого. Просто извлечение файла в директорию работало.
Для веб-скрипта я загрузил Mercurial source, в котором содержался hgwebdir.cgi, который был перемещен и переименован в d:\dev\Mercurial\webroot\hgwebdir.py
. Пошаговая статья содержит хорошие инструкции по модификации скрипта hgwebdir для Windows. Они также содержат инструкции по hgweb.config в моем случае в конечном итоге глядя, как это:
[paths]
/hg/hgwebdir.py/test = D:\dev\Mercurial\testRepo
Также хранилище хотел следующий конфиг, чтобы я мог нажать там без SSL.Примечание. Я использую Basic Authentication для аутентификации пользователей в настоящее время. Я должен был создать конфиг в D:\dev\Mercurial\testRepo\.hg\hgrc
и добавьте следующие строки:
[web]
allow_push = *
push_ssl = false
Python
Сценарий CGI является сценарий Python поэтому он требует Python. Это кажется довольно придирчивым, на котором его выполняет версия Python. Одна из статей упомянула, что для ее запуска требуется та же самая версия, которая использовалась для сборки Mercurial. В итоге я начал работать над Python 2.5 x86 после проверки Python 2.6 x64, Python 2.4, Python 2.5 x64.
IIS
Две вещи, которые я пропустил, и должен был установить, были поддержка CGI и Basic Authentication. Оба они были установлены с помощью панели управления, программ и функций. После завершения установки я создал виртуальный каталог (который позже был изменен на приложение) в IIS, указывающий на D:\dev\Mercurial\webroot
. Для виртуального каталога требовался обработчик CGI для файлов * .py, которые можно было бы добавить из сопоставлений обработчиков. Исполняемый файл был D:\dev\SDKs\Python25_x86\Python.exe %s
. Как только у IIS были права доступа к каталогу webroot, я мог бы перейти к http://localhost/hg/hgwebdir.py/test и посмотреть репозиторий.
Итак, теперь доступ к чтению работал. Когда я попытался нажать на репозиторий, я получил странные сообщения об ошибках, в которых говорилось, что это не настоящий репозиторий.
После часа отладки я закончил копирование всего дерева D:\dev\Mercurial\library\mercurial
под webroot, чтобы Python смог найти D:\dev\Mercurial\webroot\mercurial\hgweb\hgwebdir_mod.pyc
. После этого Wireshark сообщал об ошибках Access Denied в трассировке стека. Не знаю, какова настоящая причина этого, но изменение виртуального каталога в приложении в IIS и перемещение его поверх пула приложений, который выполнялся с использованием учетной записи локальной системы, удаленные ошибки доступа были удалены.
Также в какой-то момент я дал HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters
ключ реестра больше разрешений, чтобы IIS мог получить к нему доступ. Сомнительно, что он требует их после использования учетной записи локальной системы.
Как только это было сделано, толкание материала в хранилище с использованием hg push http://localhost/hg/hgwebdir.cgi/test
работало!
Проблемы и решения
- Где найти файлы библиотеки.
- Они были в библиотеке.dll в папке установки Mercurial. Мне просто нужно было их извлечь, даже если моя программа распаковки отказалась просмотреть мне его содержимое.
- Как получить сценарий Python для запуска
- Скачать правильную версию Python для архитектуры x86, поскольку сценарий использует некоторые библиотеки x86. Правильная версия Python зависит от версии Mercurial. Для 1.2.1 это был Python 2.5 x86.
- В качестве альтернативы вы можете попробовать создать Mercurial из источников с любой версией Python, но в моем случае это не удалось при создании расширений.
- Как установить CGI в IIS
- Сначала убедитесь, что CGI установлен в IIS. Это не предполагалось, что это верно в инструкциях IIS, опубликованных Беньямином.
- Создайте новое сопоставление модулей для * .py в сопоставлениях диспетчера IIS. Правильный Модуль
CgiModule
и исполняемый ваш Python исполняемый +% s
- Как разрешить сценарий CGI для записи в хранилище
- Убедитесь, что скрипт имеет все, что требуется. Мне пришлось переместить
library\mercurial\hgweb\hgwebdir_mod.pyc
в другое место.
- Убедитесь, что сценарий имеет разрешения на все, что захочет. Я решил это, создав новый пул приложений для скрипта CGI, который использовал учетную запись Local System, конвертировал виртуальный каталог в приложение в IIS и выбирал новый пул приложений.
Вы можете теперь обновите вопрос, что вы видели, как «hg serve» можно заставить принимать нажатия. –
Awesome. Спасибо за подробные инструкции! – mmacaulay