"Отказано в доступе" при загрузке файла с Rails 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 ответ

Решение

Хотя это не ясно из документации, все примеры для net-sftp и даже исходного кода предполагают, что удаленный путь должен быть полным путем к удаленному файлу, а не просто путем к папке для загрузки файла. Т.е. /files/uploaded_file.txt, не просто /files,

Что, вероятно, происходит, что сервер пытается открыть папку (/ или же /files) как файл для записи, что не получается.

Другие вопросы по тегам