Вот пример скрипта, который включен в seed.rb файл для одного из моих проектов. Я уверен, что его можно улучшить, но он обеспечивает хороший рабочий пример.
Все активы, которые я вытаскиваю, хранятся в приложении/активах/изображениях, и у них есть имена, соответствующие именам моих объектов Info (после того, как я заменил пробелы символами подчеркивания и именами).
Да, это звучит неэффективно, но, помимо размещения этих ресурсов на FTP где-то, это лучшее решение, которое я нашел для удаленного сервера, чтобы загрузить файлы прямо на S3 с помощью Carrierwave и Fog.
Моя информационная модель имеет ассоциацию has_one
модели Gallery, которая имеет ассоциацию has_many
с моделью фотографий. Загрузочный загрузчик Carrierwave монтируется в столбце «файл» (строка) этой модели.
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
Это работает безупречно для меня, но в идеале я бы не упаковать файлы, которые я загружаю в S3 в папке активов. Я более чем открыт для предложений & улучшений.
Извините, если я ушел с отметки, но вообще-то 'pi' зарезервированное слово? – danjah
Нет, pi в ruby представляется как константа, чувствительная к регистру как 'PI'. Тем не менее интересная мысль. ;] –
Thats 'Math :: PI 'кстати. ;] –