Я знаю, что ошибка «Слишком много файлов открыта» возникает, когда файлы открываются без их закрытия, но, несмотря на это, я все еще получаю эту ошибку:Rails FTP загрузка изображений: слишком много файлов открыта
remote_photos_list do |remote_path|
Net::FTP.open(ip, username, password) do |ftp|
tmp_path = File.join('tmp/images', File.basename(remote_path))
ftp.getbinaryfile(remote_path, tmp_path)
File.open(tmp_path, 'r') do |file|
listing.photos.create(:image => file)
end
File.delete(tmp_path)
end
end
Ошибка на линии listing.photos.create(:image => file)
на первой итерации.
Я попытался вложить внешние блоки в противоположные порядки, загрузив через HTTP вместо этого, и перезагрузив мою машину (это происходит локально), но все безрезультатно. Из того, что я видел в StackExchange и Google, похоже, что это должна быть очень простая проблема, но я просто не могу избавиться от этой ошибки.
Это происходит на локальный Rails 3.2.13 сервера на Mac OS X, и listing
является экземпляром Listing
модели, has_many :photos
, где Photo
есть вложение Paperclip называется image
, если любое из этого полезно.
Я также не знаю, требуется ли генерация tmp_file
; если есть способ обойти это, пожалуйста, дайте мне знать, поскольку, возможно, это поможет.
Опять же, извините, если это глупый вопрос, но я бы очень признателен за любую помощь!
Возможно, вы могли бы попытаться открыть файл один раз перед циклом и использовать его для каждой итерации (путем опорожнения его каждый раз) – Sucrenoir