Вот пример сценария, который я включил в файл seed.rb для одного из моих проектов.Я уверен, что это можно улучшить, но это хороший рабочий пример.
Все ресурсы, которые я извлекаю, хранятся в приложении / assets / images и имеют имена, соответствующие именам моих объектов Info (после того, как я заменяю пробелы подчеркиванием и прерываю имена).
Да, это звучит неэффективно, но помимо размещения этих ресурсов на FTP где-то, это лучшее решение, которое я нашел для моего удаленного сервера, чтобы иметь возможность загрузкифайлы прямо на S3 с использованием Carrierwave и Fog.
Моя модель информации имеет ассоциацию has_one
с моделью галереи, которая имеет ассоциацию has_many
с моделью фотографий.Загрузчик Carrierwave монтируется в столбце «file» (строка) этой модели.
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 в папке активов.Я более чем открыт для предложений и улучшений.