使用 Rails SFTP 上传文件时出现“权限被拒绝”

Tay*_*ren 5 sftp ruby-on-rails heroku net-sftp

我正在开发一个集成,需要我的 Rails 4 应用程序每天将 CSV 推送到 SFTP 服务器。该应用程序最终将在 Heroku 上运行。

我正在使用“net-sftp”gem。

通过 FTP 客户端 (FileZilla) 移动文件是可行的。

这是我尝试使用的非常简单的类:

require 'net/ssh'
require 'net/sftp'

class SFTP

 def initialize(org)
    case org
    when 'client'
        @host = ENV['HOST']
        @username = ENV['USERNAME']
        @password = ENV['PASSWORD']
        @port = ENV['PORT']
    end
 end

 def send(local_path)
    Net::SFTP.start(@host, @username , { password: @password, port: @port } ) do |sftp|
        sftp.upload!(local_path, "/files")
    end
 end

end
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

require 'net/ssh'
require 'net/sftp'

class SFTP

 def initialize(org)
    case org
    when 'client'
        @host = ENV['HOST']
        @username = ENV['USERNAME']
        @password = ENV['PASSWORD']
        @port = ENV['PORT']
    end
 end

 def send(local_path)
    Net::SFTP.start(@host, @username , { password: @password, port: @port } ) do |sftp|
        sftp.upload!(local_path, "/files")
    end
 end

end
Run Code Online (Sandbox Code Playgroud)

我也尝试过'~/''~'并且'~/files'作为远程路径,我也可以访问所有这些路径。

Mar*_*ryl 6

虽然文档中不清楚,但 net-sftp 的所有示例甚至源代码都表明远程路径必须是远程文件的完整路径,而不仅仅是要将文件上传到的文件夹的路径。即/files/uploaded_file.txt,不只是/files

可能发生的情况是服务器尝试将文件夹(//files)作为文件打开以进行写入,但失败了。

  • 创造了奇迹,谢谢@Martin (2认同)