2012-06-07 2 views
11

При выполнении задачи Fabric на удаленном сервере, я получаю следующую трассировку стека:Почему Fabric throw 'TypeError: аргумент должен быть int или иметь метод 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. 

Тот факт, что задача Ткань пытается выполнить мерзавец выборки и что исключения возводится в SSH/агент .py заставляет меня думать, что что-то не так с SSH-аутентификацией.

Тот же пользователь может запустить git fetch за пределами Fabric, и задача отлично работает на моем ноутбуке.

Что здесь происходит? Как решить эту проблему?

ответ

17

An issue, поднятый на вопроснике о проблемах с Fabric, упоминает, что ошибка может возникнуть из-за того, что на хосте не запущен агент ssh.

Я решил проблему, начав SSH-агент и добавление ключа пользователя:

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

успеха!

0

Для автоматического запуска SSH-агента, когда вы первый Войти, добавьте это к вашему ~/.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

Я столкнулся с этой ошибкой при использовании ткани с Python/Django, когда я пытался выполнить задачи вручную в пределах ./manage.py shell_plus.

Получается (для меня), что ошибка была вызвана тем, что мой shell_plus был настроен на использование bpython вместо ipython.

Когда я побежал ./manage.py shell_plus --ipython, все было отлично.

Я понимаю, что это, вероятно, не было прямым ответом на вашу проблему, но я полагаю, что я мог бы оставить примечание здесь для всех, кто переживает проблему, как я.