Перенос Carrierwave в ActiveStorage - PullRequest
       22

Перенос Carrierwave в ActiveStorage

0 голосов
/ 27 сентября 2018

У меня есть приложение, использующее Carrierwave для обработки загрузки файлов, но мне очень нравится простота ActiveStorage.Существует множество учебных пособий по переходу с Paperclip на ActiveStorage с предыдущей разработкой заката, но я ничего не вижу по переходу с Carrierwave на ActiveStorage.Кто-нибудь успешно сделал миграцию и мог указать мне правильное направление?

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Хм, вы проверили подробные инструкции из блога " Переход от CarrierWave к ActiveStorage в приложении Rails "

0 голосов
/ 01 октября 2018

На самом деле процедура очень проста.

шаг 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

Надеюсь, это поможет!

0 голосов
/ 27 сентября 2018

Для начала

  1. Вам придется запустить это bundle exec rails active_storage:install
  2. rails db:migrate
  3. Заменить mount_uploader :image, ImageUploader, чтобы выглядеть как has_one_attached :image, в вашей модели.
  4. Для рендеринга изображения в представлении вы должны заменить image_url на url_for(user.image).

Вам не нужно вносить какие-либо изменения вкод контроллера или в параметрах, поскольку атрибут image уже является параметром strong .

# user.rb
class User < ApplicationRecord
  # mount_uploader :image, ImageUploader

  has_one_attached :image
end

# show.html.erb
<%= image_tag url_for(user.image) %>
or
<%= image_tag user.image %>
...