Я пытаюсь обработать все загрузки изображений в моем приложении Rails, которое использует Carrierwave, так как я добавил новую версию изображения.Глядя на документацию и другие примеры, которые я нашел в Интернете, я создал файл rake со следующим кодом:
namespace :reprocess_user_photo do
desc "RESIZE"
task :recreate => :environment do
User.all.each do |user|
if user.photo?
puts user.photo_url
user.photo.cache_stored_file!
user.photo.retrieve_from_cache!(user.photo.cache_name)
user.photo.recreate_versions!
puts user.photo_identifier
user.update_column(:photo, File.basename(user.photo_url))
user.save!
puts user.photo_identifier
end
rescue => e
puts "ERROR: User: #{user.id} -> #{e.to_s}"
end
end
end
. В результате получается следующее:
/uploads/user/photo/2/1f99e6711141ef7ee2a516db9a197e87.jpg
1f99e6711141ef7ee2a516db9a197e87.jpg
9fda01d5a01ab9803d08d108078345bf.jpg
Из этого я могусмотрите, что файл, который обрабатывается, является правильным.Новый файл имеет новое имя и отображается в правильном каталоге (новый файл можно найти там), но обновление базы данных не является правильным файлом (это имя файла относится к старому файлу, который существовал до того, как я начал работать над этимфункция и была давно удалена).
Я также пытался заменить этот код на:
namespace :reprocess_user_photo do
desc "RESIZE"
task :recreate => :environment do
User.all.each do |user|
if user.photo?
puts user.photo_url
user.photo.cache_stored_file!
user.photo.retrieve_from_cache!(user.photo.cache_name)
user.photo.recreate_versions!
puts user.photo_identifier
user.photo = File.basename(user.photo_url)
user.save!
puts user.photo_identifier
end
rescue => e
puts "ERROR: User: #{user.id} -> #{e.to_s}"
end
end
end
, который имеет вывод:
/uploads/user/photo/2/0401399fd5c9092d5388e97b1991a295.jpg
0401399fd5c9092d5388e97b1991a295.jpg
0401399fd5c9092d5388e97b1991a295.jpg
Этот код делаетне заменять изображение вообще.
Наконец, я попробовал следующее:
namespace :reprocess_user_photo do
desc "RESIZE"
task :recreate => :environment do
User.all.each do |user|
if user.photo?
puts user.photo_url
user.photo.cache_stored_file!
user.photo.retrieve_from_cache!(user.photo.cache_name)
user.photo.recreate_versions!
puts user.photo_identifier
user.save!
puts user.photo_identifier
end
rescue => e
puts "ERROR: User: #{user.id} -> #{e.to_s}"
end
end
end
, который имеет вывод
/uploads/user/photo/2/946283bd082efbf970784d3c2c00235c.jpg
946283bd082efbf970784d3c2c00235c.jpg
9fda01d5a01ab9803d08d108078345bf.jpg
В этом тесте было создано новое изображениес именем файла 5f41bc1e46c67e551e9ea36a8109bae2.jpg