Я ищу информацию для установки Подвижного Сервера для Windows (7 или XP) с Apache (xampp, если полезно знать это) с Моделью передачи, точно так же, как в этом вопросе, но моя команда состоит из 5 - 8 (нерастворяющих) парней, которые каждый работают в разделенных местах, таким образом, я не думаю решение для битоприемника или anyother нечастный repo там.
Я думаю, что это сообщение добилось бы цели, но я ничего не испытал с cgi прежде,
Кто-либо сделал это прежде? где я могу найти более подробное объяснение?заранее спасибо
[Править]
Я теперь получаю эту ошибку: Преждевременный конец заголовков сценария: hgwebdir.cgi
Ошибка журнала не говорит "модуля, названного подвижным"
это - мой hgwebdir.cgi файл
#!c:/python24/python.exe
#
# An example CGI script to export multiple hgweb repos, edit as necessary
# adjust python path if not a system-wide install:
import sys
sys.path.insert(0, "c:/mercurial_library")
# enable importing on demand to reduce startup time
from mercurial import demandimport; demandimport.enable()
# Uncomment to send python tracebacks to the browser if an error occurs:
#import cgitb
#cgitb.enable()
# If you'd like to serve pages with UTF-8 instead of your default
# locale charset, you can do so by uncommenting the following lines.
# Note that this will cause your .hgrc files to be interpreted in
# UTF-8 and all your repo files to be displayed using UTF-8.
#
#import os
#os.environ["HGENCODING"] = "UTF-8"
from mercurial.hgweb.hgwebdir_mod import hgwebdir
import mercurial.hgweb.wsgicgi as wsgicgi
application = hgwebdir('hgweb.config')
wsgicgi.launch(application)
Я использовал инструкции HgWebDir :
Вот мой фрагмент httpd.conf для ртутных сайтов (с небольшими изменениями):
<VirtualHost *:88>
ServerName hg.example.com
DocumentRoot c:/apache_sites/hg
RewriteEngine on
RewriteRule ^/$ /public [R]
RewriteRule ^/public(.*) /public/hgwebdir.cgi$1 [L]
RewriteRule ^/private(.*) /private/hgwebdir.cgi$1 [L]
# mod_alias alternative (pretty url's)
<Directory c:/apache_sites/hg >
Order allow,deny
Allow from all
AllowOverride All
Options ExecCGI
AddHandler cgi-script .cgi
</Directory>
<Location /private/>
AuthType Digest
AuthName "hg.example.com"
AuthDigestProvider file
AuthUserFile c:/apache_sites/hg/hgusers
AuthGroupFile c:/apache_sites/hg/hggroup
AuthDigestDomain /private/
Require group owner
</Location>
<Location /public/>
AuthType Digest
AuthName "hg.example.com"
AuthDigestProvider file
AuthUserFile c:/apache_sites/hg/hgusers
AuthGroupFile c:/apache_sites/hg/hggroup
AuthDigestDomain /public/
<LimitExcept GET>
Require group developer
</LimitExcept>
</Location>
LogLevel debug
ErrorLog "c:/apache/logs/hg-error.log"
CustomLog "c:/apache/logs/hg-access.log" combined
LogLevel debug
</VirtualHost>
# vim:se ft=apache:
Мне также пришлось включить несколько модулей для Auth Digest и т. Д.
Я поместил hgwebdir.cgi в корень общих и частных папок и просто поместил каждый из моих репозиториев hg в подпапку репозиториев под соответствующие папки.
Аутентификация Apache позаботилась о моей авторизации.
Затем я просто помещаю файл hgweb.config в те же места, как это:
[collections]
repos = repos
[web]
allow_archive = bz2 gz zip
style = gitweb
baseurl = /public
Обновленный вопрос
Пакеты Mercurial должны быть в PYTHON_PATH
Этот ответ дает более подробную информацию.
Ответ Джона Велдонса верен, я просто хотел подробно рассказать о широком спектре возможностей, которые могут вас также заинтересовать.
hgwebdir - это просто приложение wsgi , поэтому вы можете запускать его, как любое другое приложение wsgi, используя mod_wsgi в apache2. mod_wsgi также будет работать лучше, чем cgi, потому что накладные расходы на загрузку интерпретатора python выполняются один раз, а не для каждого запроса.
Также, будучи приложением wsgi, вы также можете заключить его в промежуточное ПО или повесить его на другой URL более крупного веб-сайта и т. Д.
Например, вы используете trac (другое приложение wsgi) и хотите поделиться схемой авторизации между trac и hgwebdir, это можно сделать, поместив их обоих за промежуточное ПО для авторизации, такое как repoze.who например.
Наконец, поскольку python paste позволяет создавать веб-приложения из более мелких частей, я написал этот фрагмент кода для запуска hgwebdir с помощью вставки.
"""
Wsgi wrapper of hgweb that is paste compatible
"""
import os
from mercurial import demandimport
demandimport.enable()
from mercurial.hgweb.hgwebdir_mod import hgwebdir
CONFIG_FILE_KEY = "hgwebdir.config"
def hgweb_paste(global_config, **local_conf):
"""
looking for a config file setting in global or local
"""
cfg = global_config
cfg.update(local_conf)
config_file = cfg.get(CONFIG_FILE_KEY)
if config_file and os.path.exists(config_file):
return hgwebdir(config_file)
else:
raise KeyError, "%s not set or %s does not exist" % (CONFIG_FILE_KEY,config_file)
И соответствующая часть файла конфигурации для его загрузки ...
[server:main]
use = egg:Paste#http
host = 0.0.0.0
port = 6543
[app:main]
use = egg:hg.paste#hgweb
hgwebdir.config = %(here)s/hg.config