Ecco uno script di esempio ho incorporato in un file seed.rb per uno dei miei progetti. Sono sicuro che può essere migliorato ma fornisce un buon esempio di lavoro.
Tutte le risorse che sto prelevando sono archiviate nell'app/assets/images e hanno nomi corrispondenti ai nomi dei miei oggetti Info (dopo aver sostituito gli spazi con caratteri di sottolineatura e scartare i nomi).
Sì, suona inefficiente, ma a parte mettere quelle risorse su una somehwhere FTP, è la soluzione migliore che ho trovato per il mio server remoto per essere in grado di caricare i file direttamente a S3 utilizzando Carrierwave e nebbia.
Il modello My Info ha un'associazione has_one
in un modello di Gallery, che ha un'associazione has_many
in un modello di Foto. L'uploader Carrierwave è montato sulla colonna 'file' (stringa) di quel modello.
Info.all.each do |info|
info_name = info.name.downcase.gsub(' ', '_')
directory = File.join(Rails.root, "app/assets/images/infos/stock/#{info_name}")
# making sure the directory for this service exists
if File.directory?(directory)
gallery = info.create_gallery
Dir.foreach(directory) do |item|
next if item == '.' or item == '..'
# do work on real items
image = Photo.create!(gallery_id: gallery.id)
image.file.store!(File.open(File.join(directory, item)))
gallery.photos << image
end
info.save!
end
end
Questo funziona perfettamente per me, ma idealmente non avrebbe dovuto confezionare i file che che sto inviando a S3 all'interno della cartella asset. Sono più che aperto ai suggerimenti & miglioramenti.
fonte
2011-11-14 20:12:35
Scusate se sono lontano dal marchio, ma è "pi" una parola riservata? – danjah
No, pi in ruby è rappresentato come costante, che distingue tra maiuscole e minuscole come "PI". Tuttavia, il pensiero interessante. ;] –
Questo è 'Math :: PI' a proposito. ;] –