Ho bisogno di copiare un file da un oggetto wave carrier ad un altro. Sono tabelle diverse e diversi tipi di uploader.Qual è il modo corretto di copiare un file carrierwave da un record all'altro?
ho iniziato con:
user.avatar = image.content
(dove l'utente e l'immagine sono gli esempi di modelli, avatar e contenuti sono il carrierwave montato uploader), che ha lavorato a volte. Sembra funzionare tutto il tempo localmente, con una memoria di file, ma intermittente quando si usa nebbia e s3.
In un mailing list post ho trovato questo codice:
user.avatar = image.content.file
che ancora una volta ha funzionato a volte.
La mia soluzione di lavoro finora è:
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
che non è solo brutto, ma non riesce a passare la convalida estensione perché l'apertura di un file remoto non mantiene l'estensione (jpg, png, etc. .).
Immagine image.content.url? Non sono sicuro che funzionerebbe, dato che l'avatar ha un sacco di versioni con processi diversi che hanno bisogno di un file locale per funzionare, e non voglio che entrambi i record puntino allo stesso file, voglio una copia del file. – Pablo
Il modo in cui remote_blah_url funziona è che essenzialmente "scarica" il file da quell'URL e lo rielabora. Vedi http://stackoverflow.com/questions/5007575/how-to-assign-a-remote-file-to-carrierwave per esempio. – Ibrahim
Non funziona se l'immagine non viene servita su HTTP. Otterrai il seguente errore: 'Icona che tenta di scaricare un file che non viene servito su HTTP' – Pioz