На самом деле процедура очень проста.
шаг 1:
настройка активного хранилища.попробуйте использовать другое ведро, отличное от вашего носителя.
шаг 2:
настройте модель для предоставления доступа к ActiveStorage.пример
class Photo < AR::Base
mount_uploader :file, FileUploader # this is the current carrierwave implementation. Don't remove it
has_one_attached :file_new # this will be your new file
end
Теперь у вас будет две реализации для одной и той же модели.доступ к несущей на file
и ActiveStorage на file_new
шаг 3:
загрузка изображений из Carrierwave и сохранение их в активном хранилище. Это может быть реализовано в виде файла rake, activeJob и т. д.
Photo.find_each do |photo|
begin
filename = File.basename(URI.parse(photo.fileurl))
photo.file_new.attach(io: open(photo.file.url), filename: d.file )
rescue => e
## log/handle your errors in order to retry later
end
end
На этом этапе у вас будет одно изображение в корзине несущей и вновь созданное изображение в активной корзине!
(необязательно)
шаг 4
Как только вы будете готовы к миграции, измените вашу модель, изменив активатор доступа к хранилищу, и удалите интеграцию несущей волны
class Photo < AR::Base
has_one_attached :file # we changed the atachment name from file_new to file
end
Это удобный вариант, поэтому ваша интеграция в контроллеры и другие места останется без изменений.надеюсь!
шаг 5
Обновите свои записи в таблице active_storage_attachments
, чтобы вложения были найдены как file
, а не file_new
столбец обновления name
из "file_new" в"file"
notes
Возможно внести некоторые другие изменения в приложение для обработки вещей, которые следует учитывать
- , если ваш сайт будет работать, пока высделать миграцию одним способом, чтобы полностью работать, было бы реализовать активное хранилище для новых загрузок, тогда при отображении изображений вы можете отобразить активное хранилище и несущую волну как запасной вариант
что-то вроде этого в помощнике:
photo.attached? ? url_for(photo.file_new) : photo.file.url
Надеюсь, это поможет!