Подтвердить что ты не робот

Ошибка клиента Mercurial 255 и ошибка HTTP 404 при попытке перенаправить большие файлы на сервер

Проблема:

19/06/10 Обновление: больше проблем с данными является серверной. Получение этой ошибки в командной строке Windows 7 (см. Ниже для полной отслеживания):

URLError: <urlopen error [Errno 10054] An existing connection was forcibly closed by the remote host>
    abort: error: An existing connection was forcibly closed by the remote host

При попытке нажать набор изменений, содержащий 6 больших файлов (.exe,.dmg и т.д.) на мой удаленный сервер, мой клиент (MacHG) сообщает об ошибке:

"Ошибка во время нажатия. номер ошибки 255: abort: Ошибка HTTP 404: не найдено"

Что означает ошибка? Единственное уникальное (что я могу сказать) об этой фиксации - это размер, тип и имена файлов. Как я могу определить, какой точный файл в наборе изменений терпит неудачу? Как удалить поврежденный набор изменений из репозитория? В другой записи кто-то сообщал об использовании расширений "mq" для эффективного удаления ошибочного набора изменений из истории в репозитории, но mq выглядит слишком сложным для того, что я пытаюсь решить.


Фон:

Я могу нажать и вытащить следующие файлы: исходные файлы, каталоги, файлы .class и .jar файл на сервер и с сервера, используя как MacHG, так и toirroise HG.

Я успешно передал в свой локальный репозиторий добавление в первый раз 6 больших файлов .exe,.dmg и т.д. (около 130 Мб всего).

В следующем фиксации для моего локального репозитория я удалил ( "untracked" /забыли) 6 файлов, вызывающих проблему, однако предыдущий (сбой) набор изменений по-прежнему поставлен в очередь, чтобы быть нажатым на сервер (то есть мой локальный хост пытаясь нажать "добавить", а затем "удалить" на удаленный сервер, и придерживаться принципа "сохранить все в истории" системы управления версиями).

Я могу зафиксировать файлы .txt.java и т.д., используя TortoiseHG с ПК с Windows. Я на самом деле не тестировал передачу или нажатие тех же больших файлов с помощью TortoiseHG.

Пожалуйста, помогите!


Настройка:

Клиентские приложения = MacHG v0.9.7 (SCM 1.5.4) и TortoiseHG v1.0.4 (SCM 1.5.4)

Сервер = HTTPS, IIS7.5, Mercurial 1.5.4, Python 2.6.5, настройка с использованием следующих инструкций:

http://www.jeremyskinner.co.uk/mercurial-on-iis7/

В IIS7.5 обработчик CGI настроен на обработку всех глаголов (а не только GET, POST и HEAD).

Мой файл hgweb.cgi на сервере выглядит следующим образом:

#!/usr/bin/env python
#
# An example hgweb CGI script, edit as necessary

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

# Uncomment and adjust if Mercurial is not installed system-wide:
#import sys; sys.path.insert(0, "/path/to/python/lib")

# Uncomment to send python tracebacks to the browser if an error occurs:
#import cgitb; cgitb.enable()

from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb import hgweb, wsgicgi
application = hgweb('C:\inetpub\wwwroot\hg\hgweb.config')
wsgicgi.launch(application)

Мой файл hgweb.config на сервере выглядит следующим образом:

[collections]
C:\Mercurial Repositories = C:\Mercurial Repositories

[web]
baseurl = /hg
allow_push = usernamea
allow_push = usernameb

Вывод из командной строки из моего macbook (как Mercurial, так и MacHG) с использованием -v и -trackback flags:

macbook15:hgrepos coderunner$ hg -v --traceback push
pushing to https://coderunner:***@hg.mydomain.com.au/hg/hgrepos
searching for changes
3 changesets found
Traceback (most recent call last):
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 50, in _runcatch
    return _dispatch(ui, args)
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 471, in _dispatch
    return runcommand(lui, repo, cmd, fullargs, ui, options, d)
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 341, in runcommand
    ret = _runcommand(ui, options, cmd, d)
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 522, in _runcommand
    return checkargs()
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 476, in checkargs
    return cmdfunc()
  File "/Library/Python/2.6/site-packages/mercurial/dispatch.py", line 470, in <lambda>
    d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
  File "/Library/Python/2.6/site-packages/mercurial/util.py", line 401, in check
    return func(*args, **kwargs)
  File "/Library/Python/2.6/site-packages/mercurial/commands.py", line 2462, in push
    r = repo.push(other, opts.get('force'), revs=revs)
  File "/Library/Python/2.6/site-packages/mercurial/localrepo.py", line 1491, in push
    return self.push_unbundle(remote, force, revs)
  File "/Library/Python/2.6/site-packages/mercurial/localrepo.py", line 1636, in push_unbundle
    return remote.unbundle(cg, remote_heads, 'push')
  File "/Library/Python/2.6/site-packages/mercurial/httprepo.py", line 235, in unbundle
    heads=' '.join(map(hex, heads)))
  File "/Library/Python/2.6/site-packages/mercurial/httprepo.py", line 134, in do_read
    fp = self.do_cmd(cmd, **args)
  File "/Library/Python/2.6/site-packages/mercurial/httprepo.py", line 85, in do_cmd
    resp = self.urlopener.open(req)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 389, in open
    response = meth(req, response)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 502, in http_response
    'http', request, response, code, msg, hdrs)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 427, in error
    return self._call_chain(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 361, in _call_chain
    result = func(*args)
  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/urllib2.py", line 510, in http_error_default
    raise HTTPError(req.get_full_url(), code, msg, hdrs, fp)
HTTPError: HTTP Error 404: Not Found
abort: HTTP Error 404: Not Found
macbook15:hgrepos coderunner$ 

Вывод из хоста Windows 7 (только для TortoiseHG), пытающегося вытолкнуть те же файлы на сервер (разные изменения, но содержит те же 6 дополнительных файлов, что и набор изменений, который выталкивается из macbook)

c:\repositories\hgrepos>hg -v --traceback push
pushing to https://coderunner:***@hg.mydomain.com.au/hg/hgrepos
searching for changes
1 changesets found
Traceback (most recent call last):
  File "mercurial\dispatch.pyo", line 50, in _runcatch
  File "mercurial\dispatch.pyo", line 471, in _dispatch
  File "mercurial\dispatch.pyo", line 341, in runcommand
  File "mercurial\dispatch.pyo", line 522, in _runcommand
  File "mercurial\dispatch.pyo", line 476, in checkargs
  File "mercurial\dispatch.pyo", line 470, in <lambda>
  File "mercurial\util.pyo", line 401, in check
  File "mercurial\commands.pyo", line 2462, in push
  File "mercurial\localrepo.pyo", line 1491, in push
  File "mercurial\localrepo.pyo", line 1636, in push_unbundle
  File "mercurial\httprepo.pyo", line 235, in unbundle
  File "mercurial\httprepo.pyo", line 134, in do_read
  File "mercurial\httprepo.pyo", line 85, in do_cmd
  File "urllib2.pyo", line 389, in open
  File "urllib2.pyo", line 407, in _open
  File "urllib2.pyo", line 367, in _call_chain
  File "mercurial\url.pyo", line 523, in https_open
  File "mercurial\keepalive.pyo", line 259, in do_open
URLError: <urlopen error [Errno 10054] An existing connection was forcibly closed by the remote host>
abort: error: An existing connection was forcibly closed by the remote host

c:\repositories\hgrepos>

Это проблема сохранения жизни? Является ли IIS7.5 ошибкой? Python 2.6.5 по вине?

4b9b3361

Ответ 1

Прошел через те же болевые точки...

С настройками по умолчанию на сервере IIS вы не сможете перенаправить большие серверы на сервер, так как IIS имеет максимальную длину запроса по умолчанию всего 4 МБ и тайм-аут для CGI-скриптов 15 минут, что делает его невозможно загрузить большие файлы. Чтобы включить загрузку больших файлов (и это нелегко найти в Интернете...), выполните следующие действия:
1. В диспетчере IIS нажмите на веб-сайт node и нажмите ссылку "Лимиты...".
2. Затем укажите время ожидания соединения достаточно большим (я выбрал 1 час здесь, или 3600 секунд)
3. Затем нажмите node содержащий hg (в соответствии с процедурой установки), затем дважды щелкните CGI
4. Укажите достаточно длительный тайм-аут для CGI-скриптов (например, 10 часов)

Теперь отредактируйте C:\inetpub\wwwroot\hg\web.config, чтобы он имел новый раздел <security> в разделе <system.webserver> и <httpRuntime> в <system.web>:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
[…]
    <security>
         <requestFiltering>
           <requestLimits maxAllowedContentLength ="2147482624" />
      </requestFiltering>
    </security>
  </system.webServer>
  <system.web>
    <httpRuntime
      executionTimeout="540000" maxRequestLength="2097151"/>
  </system.web>
</configuration>

Указывает время ожидания HTTP более 6 дней и максимальный максимальный уровень загрузки около 2 ГБ.

Ответ 2

Имел ту же проблему, что и IIS 7 в качестве сервера. Пробовал решение выше, которое разрешило ошибку 255, но все же получил Errorno 10054 с более крупными файлами. Затем я увеличил время ожидания подключения в IIS, которое сработало.

Изменить: Веб-сайт → Управление веб-сайтом → Расширенные настройки → Пределы подключения → Тайм-аут подключения. Значение по умолчанию - 2 минуты. Изменил шахту на 20 минут, и она сработала.

Не уверен, почему это работает, но кажется, что Mercurial устанавливает соединение с сервером, занимает некоторое время, чтобы обрабатывать более крупные файлы, а затем отправляет запрос. К этому времени IIS отключил клиента.

Ответ 3

Хорошо, ваше решение это сделало!
У меня уже был тег requestLimits, как это:
<requestLimits maxUrl="16384" maxQueryString="65536" />
поэтому я добавил maxAllowedContentLength = "524288000" на это вот так:
<requestLimits maxUrl="16384" maxQueryString="65536" maxAllowedContentLength ="524288000" />
И это все!

Ответ 4

Я просто отправляю это для всех, кто входит в этот поток из поиска.

В настоящее время существует проблема с расширением largefiles в модуле mercurial python при размещении через IIS. См. этот пост, если вы сталкиваетесь с проблемами, которые вызывают большие изменения (или большие файлы) в IIS через TortoiseHg.

Проблема в конечном итоге оказывается ошибкой в ​​обработке SSL, введенной Python 2.7.3 (возможно, объясняя, почему так много нерешенных сообщений людей, которые ищут проблемы с Mercurial). Возвращаясь к Python 2.7.2, позвольте мне немного продвинуться вперед (заблокировано при 30 Мб, толкает вместо 15 Мб), но для правильной решенности я должен был установить IISCrypto, чтобы полностью отключить передачу по SSLv2.