之前是用 http 在两台服务器之间传输文件,服务器在两个国度,不够稳定。 准备用 ssh 替换。 在网上找了一下,找到了 net-ssh 这个 gem,我看了一下文档,用起来时出了问题(在本地用两个虚拟主机测试了一下,一会会成功,一会会失败,没办法确定出问题的地方) 在 controller 中的代码
Net::SSH.start('host', 'username' , :password => 'password') do |ssh|
## 需要解释一下,这行代码是在另一台服务器上 利用 mkdir.rb 来创建一个目录
ssh.exec!( "ruby '/script/mkdir.rb' #{dir_path}" )
ssh.scp.upload!(picture.tempfile, server_picture_path) ## 这行是重点,将文件上传并重命名
ssh.exec!( "chmod 644 #{server_picture_path}" ) ## 改变文件的权限
end
服务器上 mkdir.rb 的代码
require 'fileutils'
dir_path = ARGV[0]
FileUtils.makedirs(dir_path) if !File.directory?(dir_path)
代码会出问题
RuntimeError (^Ascp: /mhpublic/uploads/single/673/16-8302.png: No such file or directory
):
说是在 ssh.scp.upload!(picture.tempfile, server_picture_path)
这行代码出了问题
又看了看文档,并没有什么问题,代码中所有的路径使用的都是绝对路径,不会是路径问题。
现在在猜想,是不是两条单独运行,然后在上传文件时而上一条命令还没有执行完。
希望有人指点一下。