30 votes

Erreur client Mercurial 255 et erreur HTTP 404 lors de la tentative de transfert de fichiers volumineux vers le serveur

Problème:

19/06/10 mise à Jour: Plus de preuves problème est côté serveur. La réception de cette erreur sur Windows 7 en ligne de commande (voir ci-dessous pour plein de sperme):

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 une révision qui contient 6 fichiers volumineux (.exe, .dmg, etc) à mon serveur distant mon client (MacHG) signale l'erreur:

"Erreur Lors De La Poussée. Mercurial signalé numéro d'erreur 255: abort: Erreur HTTP 404: Not Found"

Que signifie l'erreur même dire?! La seule chose unique (que je peux dire) sur ce commit est la taille, le type, et les noms des fichiers. Comment puis-je déterminer l'exact du fichier au sein de l'ensemble de modifications est défectueux? Comment puis-je supprimer la corruption de la révision du référentiel? Dans un autre post, quelqu'un a signalé à l'aide de "mq" extensions de supprimer efficacement une erreur de révision de l'histoire au sein d'un référentiel, mais mq semble trop compliqué pour ce que je suis en train de résoudre.


Arrière-plan:

Je peux pousser et tirer les suivantes: source des fichiers, des répertoires, des .les fichiers de classe et un .jar fichier vers et depuis le serveur, en utilisant à la fois MacHG et toirtoise HG.

J'ai réussi a commis à mon dépôt local du outre pour la première fois le 6 grands .exe, .dmg etc les fichiers d'installation (environ 130 mo au total).

Dans la suite de s'engager à mon dépôt local, je l'ai enlevé ("sans traces" / oublier) le 6 fichiers à l'origine du problème, cependant la précédente (à défaut) de l'ensemble de modifications est toujours en attente d'être poussé sur le serveur (c'est à dire mon hôte local est en essayant de repousser le "ajouter" puis sur "supprimer" pour le serveur distant - et de rester aligné avec le "tout garder dans l'histoire" de la philosophie du système de contrôle de source).

Je peux commettre .txt .fichiers java etc à l'aide de TortoiseHG à partir de Windows Pc. Je n'ai pas fait de tests de validation ou de pousser le même gros fichiers à l'aide de TortoiseHG.

S'il vous plaît aider!


Programme d'installation:

Applications Client = 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/

Dans IIS7.5 le CGI est configuré pour gérer TOUS les verbes (et pas seulement GET, POST et de la TÊTE).

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:\inetpub\wwwroot\hg\hgweb.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 à partir de la ligne de commande à partir de mon macbook (tant Mercurial et MacHG installé) à l'aide d'-v et-trackback drapeaux:

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$ 

La sortie de Windows 7 ordinateur hôte (a seulement TortoiseHG installé) tente de faire la même des fichiers sur le serveur (différents changset, mais contient les mêmes fichiers 6 ajouts comme la révision poussé à partir du 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>

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

51voto

marcslogic Points 634

Est passé par les mêmes points de douleur...

Avec les paramètres par défaut sur le serveur IIS, vous ne serez pas en mesure de repousser les répertoires importants pour le serveur IIS dispose d'un défaut de demande maximale longueur de seulement 4 MO, et un délai d'attente pour les scripts CGI de 15 min, rendant impossible de télécharger de gros fichiers. Pour permettre le téléchargement de fichiers volumineux (et ce n'est pas facile à trouver sur le web...), effectuer les opérations suivantes:
1. Dans le Gestionnaire des services IIS, cliquez sur le nœud site web, et cliquez sur les Limites... lien.
2. Ensuite, spécifiez le délai de connexion suffisamment grand (j'ai choisi 1 heure ici, ou 3600 secondes)
3. Ensuite, cliquez sur le nœud contenant du hg (conformément à la procédure d'installation), puis double-cliquez sur CGI
4. Spécifier suffisamment longue de temps pour les scripts CGI (par exemple, 10 heures)

Maintenant, éditez C:\inetpub\wwwroot\hg\web.config, de sorte qu'il a un nouveau <security> en vertu de la section <system.webserver>, et un <httpRuntime> de spécifications en vertu de l' <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 http délai d'un peu plus de 6 jours et un maximum de la limite de téléchargement est d'environ 2 GO.

6voto

Eu le même problème à l'aide de IIS 7 en tant que serveur. Essayé la solution ci-dessus qui a résolu l'erreur 255 question, mais encore Errorno 10054 avec de gros fichiers. J'ai ensuite augmenté le délai de Connexion dans IIS qui a fonctionné.

Pour changer: Site Web -> Gérer le Site Web -> Paramètres Avancés -> Limites de Connexion -> délai de Connexion. La valeur par défaut est de 2 minutes. Changé la mienne à 20 minutes et cela a fonctionné.

Je ne sais pas pourquoi cela fonctionne, mais il semble que Mercurial établit une connexion au serveur, prend un certain temps pour traiter de plus gros fichiers, puis seulement envoie une demande. En ce moment IIS a déconnecté le client.

0voto

Pedro NF Points 358

Ok, votre solution l'a fait!
J'avais déjà une balise requestLimits comme celle-ci:
<requestLimits maxUrl="16384" maxQueryString="65536" />
j'ai donc ajouté maxAllowedContentLength = "524288000" comme ceci:
<requestLimits maxUrl="16384" maxQueryString="65536" maxAllowedContentLength ="524288000" />
Et ça l'a fait!

0voto

Peter Bernier Points 4404

Je suis en train de poster ce pour quelqu'un d'autre à venir dans le fil de la recherche.

Il y a actuellement un problème à l'aide de la largefiles extension dans l'mercurial module python lorsqu'il est hébergé par IIS. Voir ce post si vous avez des questions en poussant de grandes révisions (ou de gros fichiers) pour IIS via TortoiseHg.

Le problème ultimlately s'avère être un bug dans le traitement SSL introduit Python 2.7.3 (probablement expliquer pourquoi il y a autant unresolve postes de personnes à la recherche pour les problèmes de Mercurial). Restauration Python 2.7.2 permettez-moi de sortir un peu plus loin (bloqué à 30 mo pousse au lieu de 15 mo), mais pour résoudre correctement le problème que j'ai eu à installer le IISCrypto utilitaire pour désactiver complètement les transferts de plus de SSLv2.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X