Я использую клиент SFTP для загрузки файлов с SFTP-сервера. Я могу успешно прочитать файл и сохранить его, но не могу удалить его с SFTP-сервера после того, как закончу его сохранение.
КОД
require 'net/sftp'
class Sftp
def self.save
Net::SFTP.start(somehost, ****, password: ****) do |sftp|
sftp.dir.foreach("/files") do |entry|
next unless entry.file?
file_name = entry.name
source_file = "/files/#{file_name}"
destination_file = "tmp/#{file_name}"
sftp.download!(source_file, destination_file)
df = File.open(destination_file, "r")
file_data = df.read
# Some logic to utilise read file info. in variable "file_data"
File.delete(df) # deleted from tmp
sftp.remove!(source_file) # deleted from sftp server
end
end
end
end
Когда строка sftp.remove!(source_file)
выполняется, я получаю сообщение об ошибке, например:
"Net::SFTP::StatusException (3, \"отказано в доступе\")"
Разрешение для каталога files
drwxr-xr-x 2 root root 4096 Dec 22 10:54 files
Разрешение для файлов в каталоге files:
drwxr-xr-x 2 root root 4096 Dec 22 10:54 .
drwxr-xr-x 4 root root 4096 Dec 18 15:29 ..
-rwxrwxrwx 1 root root 749199 Dec 18 14:39 a.pdf
-rwxrwxrwx 1 root root 7945 Dec 18 15:41 b.pdf
-rwxrwxrwx 1 root root 7945 Dec 22 10:54 c.pdf
ИЗМЕНИТЬ
Я заменил следующую строку кода
sftp.remove!(source_file)
с
sftp.send(:exec, "sudo rm /var/sftp/#{source_file}")
Теперь удаление работает, но только для первого файла. Затем цикл завершается без ошибок.
В чем может быть причина?