Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Net SFTP在上传时未阻塞_Ruby_Ssh_Net Sftp - Fatal编程技术网

Ruby Net SFTP在上传时未阻塞

Ruby Net SFTP在上传时未阻塞,ruby,ssh,net-sftp,Ruby,Ssh,Net Sftp,我正在使用ruby library Net SFTP将一个文件夹中的一个文件上传到一个远程服务器上!命令,并发现当我重新获得控制权时,该文件夹尚未完成上载。除了我需要更改此文件夹的权限,并且由于远程服务器上的umask,我无法通过upload命令来完成这些权限之外,这并不是那么重要。我在远程服务器上没有根帐户,因此基本上我需要等待文件夹出现,然后更改其权限。当我尝试更改权限时,有时文件夹还不存在,但最终会显示出来。我想我的问题是双重的 1.)为什么阻止调用不能上载!在创建文件夹之前,实际上是阻塞

我正在使用ruby library Net SFTP将一个文件夹中的一个文件上传到一个远程服务器上!命令,并发现当我重新获得控制权时,该文件夹尚未完成上载。除了我需要更改此文件夹的权限,并且由于远程服务器上的umask,我无法通过upload命令来完成这些权限之外,这并不是那么重要。我在远程服务器上没有根帐户,因此基本上我需要等待文件夹出现,然后更改其权限。当我尝试更改权限时,有时文件夹还不存在,但最终会显示出来。我想我的问题是双重的

1.)为什么阻止调用不能上载!在创建文件夹之前,实际上是阻塞的。 2.)是否有某种方法可以通过较低级别的调用强制阻止它,或者我必须等待几秒钟,然后轮询以查看文件夹是否存在


更新:我怀疑真正的问题是因为我试图通过一个单独的ssh连接更改权限,该连接可能与我登录到集群的机器相同,也可能不同。换句话说,该文件夹已在一台计算机上创建,但在我尝试更改权限时尚未在其他计算机上复制。有什么方法可以解决问题吗?

v2 SFTP文档特别指出
上传阻塞直到操作完成:

但是,如果您运行的是并发SFTP或SSH会话,那么您就只能靠自己了。您必须手动轮询操作才能完成,或者以其他方式同步会话


要手动轮询,您可以使用类似循环的方法,使用
sleep
连续检查远端,直到出现您期望的文件夹。

您可以尝试使用SFTP会话的底层SSH会话来运行命令:

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

或者您可以让SFTP更改权限:

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

您使用的是哪个版本的net/sftp,您的代码看起来怎么样?我在这里用2.0.2进行了尝试,它以阻塞的方式进行上传。您确定要使用“上载!”(而不是“上载”)?