file - Error de cliente mercurial 255 y error HTTP 404 al intentar enviar archivos grandes al servidor
push iis-7.5 (4)
Ok, tu solución lo hizo!
Ya tenía una etiqueta requestLimits como esta:
<requestLimits maxUrl="16384" maxQueryString="65536" />
así que agregué maxAllowedContentLength = "524288000" de esta manera:
<requestLimits maxUrl="16384" maxQueryString="65536" maxAllowedContentLength ="524288000" />
¡Y eso lo hizo!
Problema:
19/06/10 Actualización: Más problema de evidencia es del lado del servidor. Recibiendo este error en la línea de comando de Windows 7 (ver más abajo para un seguimiento completo):
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
Al intentar enviar un conjunto de cambios que contiene 6 archivos grandes (.exe, .dmg, etc.) a mi servidor remoto, mi cliente (MacHG) está informando el error:
"Error durante el envío. Mercurial informó el error número 255: anular: HTTP Error 404: No encontrado"
¡¿Qué significa el error ?! Lo único único (que puedo decir) sobre este compromiso es el tamaño, el tipo y los nombres de archivo de los archivos. ¿Cómo puedo determinar qué archivo exacto dentro del conjunto de cambios está fallando? ¿Cómo puedo eliminar el conjunto de cambios corruptos del repositorio? En una publicación diferente, alguien informó que usó las extensiones "mq" para eliminar efectivamente un conjunto de cambios erróneo del historial dentro de un repositorio, pero mq parece demasiado complicado para lo que estoy tratando de resolver.
Fondo:
Puedo empujar y tirar de lo siguiente: archivos de origen, directorios, archivos .class y un archivo .jar desde y hacia el servidor, utilizando tanto MacHG como toirtoise HG.
Me comprometí con éxito a mi repositorio local con la adición por primera vez de los 6 archivos de instalación grandes .exe, .dmg, etc. (aproximadamente 130Mb en total).
En la siguiente confirmación de mi repositorio local, eliminé ("sin seguimiento" / olvido) los 6 archivos que causan el problema; sin embargo, el conjunto de cambios anterior (que falla) aún está en cola para ser enviado al servidor (es decir, mi host local está tratando de enviar) el "agregar" y luego el "quitar" al servidor remoto, y mantenerse alineado con la filosofía de "mantener todo en la historia" del sistema de control de fuente).
Puedo enviar archivos .txt, .java, etc. utilizando TortoiseHG desde PC con Windows. En realidad, no he probado probar o enviar los mismos archivos grandes con TortoiseHG.
¡Por favor ayuda!
Preparar:
Aplicaciones cliente = MacHG v0.9.7 (SCM 1.5.4) y TortoiseHG v1.0.4 (SCM 1.5.4)
Servidor = HTTPS, IIS7.5, Mercurial 1.5.4, Python 2.6.5, configura usando estas instrucciones:
http://www.jeremyskinner.co.uk/mercurial-on-iis7/
En IIS7.5, el controlador CGI está configurado para manejar TODOS los verbos (no solo GET, POST y HEAD).
Mi archivo hgweb.cgi en el servidor es el siguiente:
#!/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)
Mi archivo hgweb.config en el servidor es el siguiente:
[collections]
C:/Mercurial Repositories = C:/Mercurial Repositories
[web]
baseurl = /hg
allow_push = usernamea
allow_push = usernameb
Salida desde la línea de comandos desde mi macbook (tanto Mercurial como MacHG instalado) usando los indicadores -v y --trackback:
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$
Salida desde el host de Windows 7 (solo tiene instalado TortoiseHG) que intenta enviar los mismos archivos al servidor (diferente changset, pero contiene las mismas 6 adiciones de archivos que el conjunto de cambios que se está enviando desde el 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>
Es un problema para mantenerse vivo? ¿Es IIS7.5 culpa? Python 2.6.5 en la falla?
Pasó por los mismos puntos de dolor ...
Con la configuración predeterminada en el servidor IIS, no podrá enviar repositorios grandes al servidor, ya que IIS tiene una longitud de solicitud máxima predeterminada de solo 4 MB, y un tiempo de espera para scripts CGI de 15 min, lo que hace imposible cargar archivos de gran tamaño. Para habilitar la carga de archivos grandes (y esto no es fácil de encontrar en la web ...), haga lo siguiente:
1. En el Administrador de IIS, haga clic en el nodo del sitio web y haga clic en el enlace Límites….
2. Luego especifique un tiempo de espera de conexión suficientemente grande (elegí 1 hora aquí, o 3600 segundos)
3. A continuación, haga clic en el nodo que contiene hg (según el procedimiento de instalación), luego haga doble clic en CGI
4. Especifique un tiempo de espera suficientemente largo para los scripts CGI (por ejemplo, 10 horas)
Ahora, edite C: / inetpub / wwwroot / hg / web.config, para que tenga una nueva sección <security>
en <system.webserver>
, y una <httpRuntime>
en <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>
Esto especifica un tiempo de espera de http de poco más de 6 días y un límite de carga máximo de aproximadamente 2 GB.
Solo publico esto para cualquier otra persona que entre en este hilo desde una búsqueda.
Actualmente hay un problema con la extensión de archivos grandes en el módulo mercurial python cuando se hospeda a través de IIS. Consulte esta publicación si tiene problemas para enviar grandes conjuntos de cambios (o archivos grandes) a IIS a través de TortoiseHg.
El problema, en definitiva, resulta ser un error en el procesamiento de SSL introducido en Python 2.7.3 (probablemente explica por qué hay tantas publicaciones no resueltas de personas que buscan problemas con Mercurial). Al volver a Python 2.7.2, permítame ir un poco más adelante (bloqueado a 30 MB de empuje en lugar de 15 Mb), pero para resolver adecuadamente el problema, tuve que instalar la utilidad IISCrypto para deshabilitar completamente las transferencias sobre SSLv2.
Tuvo el mismo problema al usar IIS 7 como servidor. Probé la solución por encima de la cual se resolvió el error 255, pero se obtuvo Errorno 10054 con archivos más grandes. Luego aumenté el Tiempo de espera de conexión en IIS, que funcionó.
Para cambiar: Sitio web -> Administrar sitio web -> Configuración avanzada -> Límites de conexión -> Tiempo de espera de conexión. El valor predeterminado es 2 minutos. Cambié la mía a 20 minutos y funcionó.
No estoy seguro de por qué funciona, pero parece que Mercurial hace una conexión con el servidor, tarda un poco en procesar archivos más grandes y luego solo envía una solicitud. En ese momento IIS ha desconectado al cliente.