Mercurial client error 255 et HTTP error 404 lors de la tentative de pousser de gros fichiers vers le serveur

Problème:

19/06/10 mise à jour: le problème le plus évident est Côté Serveur. Réception de cette erreur sur la ligne de commande Windows 7 (Voir ci-dessous pour un retraçage complet):

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

lors de la tentative de pousser un jeu de modifications qui contient 6 gros fichiers (.EXE. ,dmg, etc) à mon serveur distant mon client (MacHG) signale l'erreur:

" Erreur Pendant La Poussée. Mercurial signalé erreur numéro 255: annuler: erreur HTTP 404: Not Found"

Ce qui le message d'erreur même dire?! La seule chose unique (que je peux dire) à propos de cette propagation est la taille, le type et les noms de fichier des fichiers. Comment puis-je déterminer quel fichier exact dans le jeu de modifications échoue? Comment puis-je supprimer le jeu de modifications corrompu du dépôt? Dans un autre post, quelqu'un a signalé avoir utilisé des extensions "mq" pour supprimer efficacement un jeu de modifications erroné de l'Historique Dans un dépôt, mais mq semble excessivement compliqué pour ce que j'essaie de faire résoudre.


Contexte:

je peux pousser et tirer ce qui suit: fichiers source, répertoires, .les fichiers de classe et un .jar file à destination et en provenance du serveur, en utilisant à la fois MacHG et toirtoise HG.

j'ai engagé avec succès dans mon dépôt local l'ajout pour la première fois des 6 grands .EXE. ,fichiers d'installateur dmg etc (environ 130mo au total).

dans la propagation suivante vers mon dépôt local, j'ai supprimé ("untracked" / forget) les 6 fichiers à l'origine du problème, Cependant, le dernier jeu de modifications (qui échoue) est toujours dans la file d'attente pour être poussé vers le serveur (c'est - à-dire que mon hôte local essaie de pousser le bouton "Ajouter" puis le bouton "Supprimer" vers le serveur distant-et de rester aligné avec la philosophie "garder tout dans l'historique" du système de contrôle source).

je peux m'engager .txt .fichiers java etc en utilisant TortoiseHG à partir des PC Windows. Je n'ai pas vraiment testé en commettant ou en poussant les mêmes gros fichiers avec TortoiseHG.

s'il vous Plaît à l'aide!


Installation:

Client applications = MacHG v0.9.7 (SCM 1.5.4), et TortoiseHG v1.0.4 (SCM 1.5.4)

Serveur = HTTPS, IIS7.5, Mercurial 1.5.4, Python 2.6.5, le programme d'installation à l'aide de ces instructions:

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

In IIS7.5 le gestionnaire CGI est configuré pour gérer tous les verbes (pas seulement GET, POST et HEAD).

mon hgweb.cgi fichier sur le serveur est comme suit:

#!/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:inetpubwwwroothghgweb.config')
wsgicgi.launch(application)

mon hgweb.fichier de configuration sur le serveur est le suivant:

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

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

sortie de la ligne de commande de mon macbook (Mercurial et MacHG installés) en utilisant les options-v et --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$ 

sortie de Windows 7 hôte (a seulement TortoiseHG installé) essayant de pousser les mêmes fichiers vers le serveur (changset différent, mais contient les mêmes 6 ajouts de fichiers que le jeu de modifications étant poussé de la macbook)

c:repositorieshgrepos>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 "mercurialdispatch.pyo", line 50, in _runcatch
  File "mercurialdispatch.pyo", line 471, in _dispatch
  File "mercurialdispatch.pyo", line 341, in runcommand
  File "mercurialdispatch.pyo", line 522, in _runcommand
  File "mercurialdispatch.pyo", line 476, in checkargs
  File "mercurialdispatch.pyo", line 470, in <lambda>
  File "mercurialutil.pyo", line 401, in check
  File "mercurialcommands.pyo", line 2462, in push
  File "mercuriallocalrepo.pyo", line 1491, in push
  File "mercuriallocalrepo.pyo", line 1636, in push_unbundle
  File "mercurialhttprepo.pyo", line 235, in unbundle
  File "mercurialhttprepo.pyo", line 134, in do_read
  File "mercurialhttprepo.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 "mercurialurl.pyo", line 523, in https_open
  File "mercurialkeepalive.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:repositorieshgrepos>

C'est un keep-alive problème? Is IIS7.5 en faute? Python 2.6.5 en faute?

30
demandé sur coderunner 2010-06-18 13:48:37

4 réponses

a traversé les mêmes points douloureux...

avec les paramètres par défaut sur le serveur IIS, vous ne pourrez pas pousser de grands dépôts vers le serveur, car IIS a une longueur de requête maximale par défaut de seulement 4 Mo, et un délai d'attente pour les scripts CGI de 15 min, ce qui rend impossible le téléchargement de gros fichiers. Pour activer le téléchargement de gros fichiers (et ce n'est pas facile à trouver sur le web...), faites ce qui suit:

1. Dans IIS Manager, cliquez sur le noeud du site web, et cliquez sur le Les limites... lien.

2. Alors spécifiez un délai de connexion suffisamment grand (j'ai choisi 1 heure ici, ou 3600 secondes)

3. Ensuite, cliquez sur le noeud contenant hg( selon la procédure d'installation), puis double-cliquez sur CGI

4. Spécifiez un temps d'arrêt suffisamment long pour les scripts CGI (par exemple 10 heures)

maintenant, éditez C:\inetpub\wwwroot\hg\web.config, de sorte qu'il a un nouveau <security> rubrique <system.webserver> et <httpRuntime> cahier des charges <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>

spécifie un délai http d'un peu plus de 6 jours, et une limite de téléchargement maximum d'environ 2 Go.

50
répondu marcslogic 2010-06-21 08:37:18

avait le même problème en utilisant IIS 7 comme serveur. Essayé la solution ci-dessus qui a résolu le problème d'erreur 255, mais toujours obtenu Errorno 10054 avec des fichiers plus grands. J'ai ensuite augmenté le temps de connexion dans IIS qui a fonctionné.

modifier: Site Web -> Gérer le Site Web -> Paramètres avancés -> limites de connexion- > durée de la connexion. La valeur par défaut est de 2 minutes. J'ai changé le mien à 20 minutes et ça a marché.

Je ne sais pas pourquoi cela fonctionne, mais il semble que Mercurial fait une connexion au serveur, prend un certain temps pour traiter des fichiers plus grands, puis envoie seulement une requête. À ce moment-là, L'ISI a déconnecté le client.

6
répondu Reinard Mavronicolas 2011-03-18 10:00:25

Ok, ta solution l'a fait!

J'ai déjà eu une requestLimits balise comme ceci:

<requestLimits maxUrl="16384" maxQueryString="65536" />

j'ai donc ajouté maxAllowedContentLength = "524288000" comme ceci:

<requestLimits maxUrl="16384" maxQueryString="65536" maxAllowedContentLength ="524288000" />

Et qui l'a fait!

0
répondu Pedro Ferreira 2013-04-08 16:58:20

je poste juste ceci pour n'importe qui d'autre venant dans ce fil d'une recherche.

il y a actuellement un problème avec l'extension largefiles dans le module Python mercurial lorsqu'il est hébergé via IIS. Voir ce post si vous rencontrez des problèmes poussant de grands changesets (ou de grands fichiers) vers IIS via TortoiseHg.

le problème se révèle finalement être un bug dans le traitement SSL introduit Python 2.7.3 (expliquant probablement pourquoi il y a tant de non résolus postes de personnes à la recherche de problèmes avec Mercurial). Revenir à Python 2.7.2 laissez-moi aller un peu plus loin (bloqué à 30Mb pushes au lieu de 15Mb), mais pour résoudre correctement le problème j'ai dû installer le IISCrypto utilité pour désactiver complètement les transferts sur SSLv2.

0
répondu Peter Bernier 2016-08-26 16:13:20