2012-06-07 8 views
11

Cuando se ejecuta una tarea de la tela en un servidor remoto consigo el seguimiento de pila:¿Por qué Fabric throw 'TypeError: argumento debe ser un int, o tener un método fileno()'?

[x.x.x.x] run: git fetch && git reset --hard origin/develop 
Exception in thread Thread-2: 
Traceback (most recent call last): 
    File "/usr/lib/python2.6/threading.py", line 532, in __bootstrap_inner 
    self.run() 
    File "/var/lib/jenkins/jobs/deploy/workspace/.pyenv/lib/python2.6/site-packages/ssh/agent.py", line 115, in run 
    self._communicate() 
    File "/var/lib/jenkins/jobs/deploy/workspace/.pyenv/lib/python2.6/site-packages/ssh/agent.py", line 125, in _communicate 
    events = select([self._agent._conn, self.__inr], [], [], 0.5) 
TypeError: argument must be an int, or have a fileno() method. 

El hecho de que la tarea de la tela está tratando de realizar una git traiga y que las excepciones se eleva en ssh/agente .py me hace pensar que algo está mal con la autenticación SSH.

El mismo usuario puede ejecutar git fetch fuera de Fabric, y la tarea funciona bien en mi computadora portátil.

¿Qué está pasando aquí? ¿Cómo resuelvo este problema?

Respuesta

17

An issue subido en el rastreador de problemas de Fabric menciona que el error puede deberse a que no se ejecuta ssh-agent en el host.

me resolvió el problema iniciando un ssh-agent y añadiendo la clave del usuario:

$> eval `ssh-agent` 
$> ssh-add ~/.ssh/id_rsa 

éxito!

0

Para el inicio automático de ssh-agent cuando primer inicio de sesión, añadir esto a su ~/.bashrc:

if [ ! -S ~/.ssh/ssh_auth_sock ]; then 
    eval `ssh-agent` 
    ln -sf "$SSH_AUTH_SOCK" ~/.ssh/ssh_auth_sock 
    ssh-add 
fi 
export SSH_AUTH_SOCK=~/.ssh/ssh_auth_sock 
0

me encontré con este error durante el uso de la tela con Python/Django cuando yo estaba tratando de ejecutar tareas manualmente dentro de ./manage.py shell_plus.

Resulta (para mí) que el error fue causado por el hecho de que mi shell_plus estaba configurado para usar bpython en lugar de ipython.

En su lugar, cuando ejecuté ./manage.py shell_plus --ipython, todo funcionó a la perfección.

Me doy cuenta de que esto probablemente no fue una respuesta directa a su problema, pero creo que también debería dejar una nota aquí para cualquier persona que tenga un problema similar al que tuve.

Cuestiones relacionadas