После того, как Бенджамин указал на сценарии CGI, обслуживающие HTTP, я решил попробовать их, и мне удалось получить репозиторий, размещенный через HTTP. Красная книга, которую Бенджамин connected оказал большую помощь, как и две статьи вики Mercurial. Один описывает Mercurial Publishing в целом, а другой содержит пошаговые инструкции по настройке скрипта CGGIbDir для 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, который содержал hgwebdir.cgi который был перемещен и переименован в d:\dev\Mercurial\webroot\hgwebdir.py
. Пошаговая статья содержит хорошие инструкции по модификации скрипта hgwebdir для Windows. Они также содержат инструкции для hgweb.config, которые в моем случае выглядели так:
[paths]
/hg/hgwebdir.py/test = D:\dev\Mercurial\testRepo
Также репозиторий хотел следующую конфигурацию, чтобы я мог нажимать туда без SSL. Примечание. В настоящее время я использую обычную проверку подлинности для проверки подлинности пользователей. Мне пришлось создать конфиг в 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 и базовая аутентификация. Оба они были установлены через Панель управления, Программы и компоненты. После завершения установки я создал виртуальный каталог (который позже я изменил на приложение) в IIS, указывая на D:\dev\Mercurial\webroot
. Виртуальный каталог требовал обработчика CGI для файлов * .py, который можно было добавить из сопоставлений обработчиков. Исполняемый файл был D:\dev\SDKs\Python25_x86\Python.exe %s
. Когда у IIS были разрешения на корневой каталог, я мог перейти к http://localhost/hg/hgwebdir.py/test и посмотрите репозиторий.
Итак, теперь доступ для чтения работал. Когда я пытался нажать на репозиторий, я получал странные сообщения об ошибках, в которых говорилось, что это не настоящий репозиторий.
После часа отладки я скопировал все дерево D:\dev\Mercurial\library\mercurial
в корневой каталог, чтобы Python мог найти D:\dev\Mercurial\webroot\mercurial\hgweb\hgwebdir_mod.pyc
. После этого Wireshark сообщал об ошибках отказа в доступе в трассировке стека. Понятия не имею, в чем была настоящая причина этого, но изменение виртуального каталога в приложение в IIS и перемещение его поверх пула приложений, который запускался с использованием учетной записи локальной системы, ошибки отказа в доступе исчезли.
Также в какой-то момент я дал HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters
разделу реестра больше разрешений, чтобы IIS мог получить к нему доступ. Сомневаюсь, что они требуются после использования учетной записи локальной системы.
Как только это было сделано, отправка материалов в репозиторий с использованием hg push http://localhost/hg/hgwebdir.cgi/test
стала работать!
Проблемы и решения
- Where to find the library files.
- They were in the library.dll under Mercurial installation folder. I just had to extract them even if my unzip program refused to view me its contents.
- How to get the Python script to run
- Download the correct Python version for x86 architecture as the script uses some x86 libraries. The correct Python version depends on the Mercurial version. For 1.2.1 it was Python 2.5 x86.
- В качестве альтернативы вы можете попробовать собрать Mercurial из источников с любой версией Python, которую вы хотите, но в моем случае это не удалось при создании расширений.
- How to set CGI up in IIS
- First make sure CGI is installed in IIS. This wasn't assumed to be true in the IIS instructions Benjamin posted.
- Создайте новое сопоставление модулей для * .py в сопоставлениях обработчиков IIS. Правильный модуль -
CgiModule
, а исполняемый файл - ваш исполняемый файл Python +% s
- How to allow the CGI script to write to the repository
- Make sure the script has everything it requires. I had to move the
library\mercurial\hgweb\hgwebdir_mod.pyc
to another place.
- Убедитесь, что у сценария есть разрешения везде, где он хочет. Я решил это, создав новый пул приложений для сценария CGI, который использовал учетную запись локальной системы, преобразовав виртуальный каталог в приложение в IIS и выбрав новый пул приложений.
person
Mikko Rantanen
schedule
28.04.2009