Rails + Carrierwave как переместить в другую директорию и переименовать файлы?

Здравствуйте
Столкнулся со следующей проблемой в рабочем проекте.необходимо сменить структуру каталогов для загружаемых посредством carrierwave изображений. Уперся в потолок файловой системы nix'ов в 32000 директорий.
Сейчас файлы загружаются в директорию:
def store_dir
    "uploads/#{model.class.to_s.underscore}/#{model.id}/"
end
def filename
    "photo.jpg" if original_filename
  end

А нужно чтобы стало:
def store_dir
    "uploads/#{model.class.to_s.underscore}/"
end

Плюс файлы переименовать в :
def filename
    "#{secure_token}.jpg" if original_filename
  end
  
  protected
  def secure_token
    var = :"@#{mounted_as}_secure_token"
    model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
  end

Но если я просто меняю директорию, то ссылки на старые файлы становятся недействительными. Нашел на stackoverflow решение . Сделал всё один в один, выполняю скрипт:
RoutePointPhoto.all.each do |image|
  image.photo.cache! 
  image.photo.store!
end

получаю ошибку:
ArgumentError: wrong number of arguments (1 for 0)
        from /team/mss/app/uploaders/route_point_photo_uploader.rb:30:in `swap_out_store_dir'
  • Вопрос задан
  • 2609 просмотров
Решения вопроса 1
HerMajor
@HerMajor Автор вопроса
Вообщем решил проблему в два этапа:
1) Переименовываем файлы как описано тут
2) Перемещаем файлы командой
find public/uploads/route_point_photo -name '*.jpg' -exec cp {} public/uploads/route_point_photo ';'

3) Меняем директорию в файле uploader'а
def store_dir
    "uploads/#{model.class.to_s.underscore}/"
end
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы