首页 > 解决方案 > 尝试在 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,我可以清楚地看到一个文件坐在那里。

标签: ruby-on-railssftp

解决方案


您在问题后添加的评论使我们对 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 将不会被替换。


推荐阅读