ruby-on-rails - 尝试在 Ruby/Rails 中使用 SFTP.download 理解和下载文件
问题描述
我正在尝试使用 SFTP 方法将文件下载到 Rails 应用程序中sftp.download!('path/to/remote/folder/#{filename}', 'path/to/local/folder)
完整的方法:
def missouri
sftp = Net::SFTP.start('host.name', '<username>', password: '<password>')
sftp.dir.entries('/path/to/remote/folder/') do |entry|
sftp.download!('/path/to/remote/folder/#{entry.name}.txt', '/Users/<me>/local/folder/')
end
end
我收到一个错误:
RuntimeError (open /path/to/remote/folder/filename.txt: no such file (2))
如果我删除文件扩展名 (txt),我会收到错误消息:
Errno::EACCES (Permission denied @ rb_sysopen - /Users/<me>/local/folder/)
当我“深入”到该部分并运行此方法时,我会返回 NET::Sftp 对象及其所有属性,但没有实际下载。我尝试访问的 SFTP 是一个 ASPX.human 页面,我尝试下载文件的路径位于远程站点的文件结构中,所以我不确定我是否尝试访问错误的路径?
如果我去实际的 SFTP,我可以清楚地看到一个文件坐在那里。
解决方案
您在问题后添加的评论使我们对 unix 权利感到好奇。您的脚本是否由允许在目标本地目录上写入的用户启动?
换句话说,以下shell命令的输出是什么?
ls -l /path/to/remote/folder
使用您的脚本的用户/组是什么?
顺便说一句,您的代码中有一件奇怪的事情:
sftp.download!('/path/to/remote/folder/#{entry.name}.txt'
应该:
sftp.download!("/path/to/remote/folder/#{entry.name}.txt"
否则 entry.name 将不会被替换。