2012-06-07 11 views
11

Wenn ein Stoff Aufgabe auf einem Remote-Server ausgeführt ich folgende Stack-Trace erhalten:Warum wirft Fabric "TypeError: argument muss ein int sein, oder haben Sie eine fileno() Methode"?

[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. 

Die Tatsache, dass die Gewebe-Aufgabe ein git holen und dass Ausnahmen in ssh angehoben auszuführen versucht/Agenten .py lässt mich denken, dass etwas mit der SSH-Authentifizierung nicht stimmt.

Derselbe Benutzer kann git fetch außerhalb Fabric ausführen, und die Aufgabe läuft gut auf meinem Laptop.

Was geht hier vor? Wie behebe ich dieses Problem?

Antwort

17

An issue ausgelöst am Fehler-Tracker von Fabric erwähnt, dass der Fehler auftreten kann, wenn ssh-agent nicht auf dem Host ausgeführt wird.

Ich löste das Problem, indem sie ein ssh-agent starten und das Hinzufügen der Schlüssel des Benutzers:

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

Erfolg!

0

Um Auto-Start-ssh-agent, wenn Sie zuerst Login, fügen Sie diese zu Ihrer ~/.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

ich in diesen Fehler lief bei der Verwendung von Stoff mit Python/Django, wenn ich Aufgaben von Hand auszuführen versuchte, innerhalb ./manage.py shell_plus.

Es stellt sich heraus (für mich), dass der Fehler durch die Tatsache verursacht wurde, dass mein shell_plus eingerichtet wurde, bpython anstelle von ipython zu verwenden.

Als ich ./manage.py shell_plus --ipython lief, lief alles perfekt.

Ich realisiere, dass dies wahrscheinlich keine direkte Antwort auf Ihr Problem war, aber ich denke, ich könnte auch hier eine Notiz für jeden anderen hinterlassen, der über das Thema hinausgeht, wie ich es tat.

Verwandte Themen