Muszę skopiować plik z jednego obiektu fali nośnej do innego. Są to różne tabele i różne typy przesyłających.Jaki jest właściwy sposób kopiowania pliku carrierwave z jednego rekordu do drugiego?
Zacząłem:
user.avatar = image.content
(gdzie użytkownik i obraz są modelowe przypadki, awatar i treści są carrierwave zamontowany przesyłające), który pracował czasami. Wydaje się działać cały czas lokalnie, z pamięcią plików, ale sporadycznie, gdy używa się mgły i s3.
W mailing list post znalazłem ten kod:
user.avatar = image.content.file
że znowu pracował czasami.
Mam roztwór roboczy tak daleko jest:
require "open-uri"
begin
user.avatar = open(image.url)
rescue Errno::ENOENT => e
begin
user.avatar = open(image.path)
rescue Errno::ENOENT => e
# Ok, whatever.
end
end
który jest nie tylko brzydkie, ale nie przejdzie walidację przedłużacza ponieważ otwarcie pliku zdalnego nie utrzymuje rozszerzenie (jpg, png, etc. .).
Czy obraz image.content.url? Nie jestem pewien, czy to zadziała, ponieważ awatar ma wiele wersji z różnymi procesami, które wymagają lokalnego pliku do pracy, i nie chcę, aby oba rekordy wskazywały na ten sam plik, chcę kopię pliku. – Pablo
Sposób działania remote_blah_url polega na tym, że zasadniczo "pobiera" plik z tego adresu URL i przetwarza go ponownie. Zobacz na przykład http://stackoverflow.com/questions/5007575/how-to-assign-a-remote-file-to-carrierwave. – Ibrahim
Nie działa, jeśli obraz nie jest wyświetlany przez HTTP. Otrzymasz następujący komunikat: 'Ikona próbująca pobrać plik, który nie jest obsługiwany przez HTTP' – Pioz