В Rails 5.2.1 я настроил ActiveStorage (5.2.1) для службы Disk
.
У меня есть модель Pic:
class Pic < ApplicationRecord
has_one_attached :image
end
Я могу прикрепить изображения:
imgpath = "/tmp/images/..."
Pic.first.image.attach(io: File.open(imgpath), filename: imgpath)
Я хотел сделать это в чем-то вроде задачи Rake (но результат тот же, если сделать это из консоли Rails) для пакетной загрузки изображений, например:
pfs = Dir['testpics/*']
Pic.all.each { |pic|
pf = pfs.shift
pic.image.attach(io: File.open(pf), filename: pf)
}
Это работает без ошибок.Тем не менее, на удивление (по крайней мере для меня) некоторые изображения не имеют соответствующего большого двоичного объекта впоследствии, и запросы завершаются с 500 Внутренняя ошибка сервера: Errno::ENOENT (No such file or directory @ rb_sysopen
.
Проверка pic.image.attached?
возвращает истину.Однако pic.image.download
выдает исключение.
Даже незнакомец, вызывающий pic.image.download
сразу после присоединения , работает .Спустя 2 секунды этого не происходит.
Единственный способ определить, правильно ли загружено изображение, - это подождать ~ 2 секунды после его прикрепления и , а затем попытаться загрузить.,Если я продолжу повторную попытку присоединения после ожидания 2 секунд и проверки, все ли в порядке, все изображения будут в порядке.Но очевидно, что это не правильно.:) Простое ожидание между вызовами присоединения не помогает, я должен проверить после ожидания, затем снова подключить, а затем проверить еще раз, пока все в порядке - иногда нормально с первой попытки, иногда с 10-м, но в конечном итоге это будетпреуспеть.
Это все на моем локальном диске, а не, например, эфемерное хранилище в Heroku.Кроме того, я запускаю его на Ubuntu 18.04 (Bionic), где не установлено ничего, что могло бы удалить капли (т.е. не было антивируса или чего-либо подобного).Я действительно думаю, что проблема внутренняя в ActiveStorage, или, возможно, то, как я ее использую.
Что происходит?Куда попадают капли через несколько секунд, когда они уже успешно загружены?
С сервисом S3 все в порядке, капли не исчезают.