"许可被拒绝"使用Rails SFTP上传文件时

时间:2015-03-27 15:17:33

标签: ruby-on-rails-4 heroku sftp net-sftp

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

我正在使用'net-sftp'宝石。

通过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

这是我得到的错误:

Net::SFTP::StatusException: Net::SFTP::StatusException open /files (3, "permission denied")

/net-sftp-2.1.2/lib/net/sftp/operations/upload.rb:321:in `on_open'
/net-sftp-2.1.2/lib/net/sftp/request.rb:87:in `call'
/net-sftp-2.1.2/lib/net/sftp/request.rb:87:in `respond_to'
/net-sftp-2.1.2/lib/net/sftp/session.rb:948:in `dispatch_request'
/net-sftp-2.1.2/lib/net/sftp/session.rb:911:in `when_channel_polled'

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

1 个答案:

答案 0 :(得分:1)

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

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