Ruby Net-SFTP не блокируется при загрузке - PullRequest
0 голосов
/ 27 августа 2011

Я использую библиотеку ruby ​​Net-SFTP для загрузки папки с файлами на удаленный сервер, используя загрузку!и обнаружив, что при восстановлении управления папка не завершила загрузку.Это было бы не так важно, за исключением того факта, что мне нужно изменить разрешения для этой папки, и я не могу выполнить их с помощью команды загрузки из-за маски на удаленном сервере.У меня нет учетной записи root на удаленном сервере, поэтому в основном мне нужно подождать, пока папка будет там, а затем изменить ее разрешения.Когда я пытаюсь изменить разрешения, иногда папка еще не существует, но в конечном итоге будет отображаться.Я думаю, мой вопрос двоякий.

1.) Почему не блокирующий вызов для загрузки!фактически блокировка, пока папка не была создана.2.) Есть ли какой-нибудь способ заставить его заблокировать вызов более низкого уровня, или мне нужно подождать пару секунд, а затем опросить, чтобы увидеть, есть ли там папка?

ОБНОВЛЕНИЕ: Я подозреваюреальная проблема заключается в том, что я пытаюсь изменить разрешения для отдельного ssh-соединения, которое может быть, а может и не быть той же машиной, что и я, входя в кластер.Другими словами, папка была создана на одном компьютере, но она не реплицировалась на другие к тому времени, когда я пытаюсь изменить разрешения.Есть ли способ закрыть вопрос?

Ответы [ 2 ]

1 голос
/ 29 января 2014

Вы можете попробовать использовать базовый сеанс SSH сеанса SFTP для запуска команды:

Net::SSH.start("localhost", "user", "password") do |ssh|
  ssh.sftp.upload!("/local/file.tgz", "/remote/file.tgz")
  ssh.exec! "cd /some/path && tar xf /remote/file.tgz && rm /remote/file.tgz"
end

http://net -ssh.github.io / net-sftp / classes / Net / SSH /Connection / Session.html

Или вы можете позволить SFTP изменить разрешения:

sftp.setstat("/path/to/remote.file", :permissions => 0644)

http://net -ssh.github.io / sftp / v1 / faq.html # 2202822

0 голосов
/ 28 августа 2011

В документах SFTP v2 конкретно сказано, что upload! блокируется до завершения операции:
http://net -ssh.rubyforge.org / sftp / v2 / api / classes / Net / SFTP / Session.html # M000116

Однако, если вы запускаете параллельный сеанс SFTP или SSH, вы сами по себе.Вы должны вручную выполнить опрос для завершения операции или синхронизировать сеансы другим способом.

Для ручного опроса вы можете сделать это с помощью цикла, используя sleep, чтобы непрерывно проверять удаленный конец допоявится ожидаемая папка.

...