Что мне нужно по соображениям производительности, так это то, что в версиях большого пальца сохраняется формат и расширение png. Формат, похоже, преобразуется правильно, но он сохраняет сохранение изображений с расширениями .jpg.Rails и Carrierwave, сохранить версии с разными расширениями
Так я этот код для моего пользовательского аватара:
class UserAvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
version :large do
process resize_to_fit: [ 600, 600 ], convert: 'jpg'
end
version :small, from_version: :large do
process resize_to_fill: [ 216, 216 ], convert: 'jpg'
end
version :thumb, from_version: :small do
process resize_to_fill: [ 80, 80 ], convert: 'png'
end
version :tiny, from_version: :thumb do
process resize_to_fill: [ 50, 50 ], convert: 'png'
end
def filename
"#{secure_token}.#{file.extension}" if original_filename.present?
end
protected
def secure_token
var = :"@#{mounted_as}_secure_token"
model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
end
end
И он сохраняет изображения, как это:
- cbc9418c-FFAA-49DA-A530-f940d3da2868.jpg
- large_cbc9418c -ffaa-49DA-A530-f940d3da2868.jpg
- small_cbc9418c-FFAA-49DA-A530-f940d3da2868.jpg
- thumb_cbc9 418c-FFAA-49DA-A530-f940d3da2868.jpg
- tiny_cbc9418c-FFAA-49DA-A530-f940d3da2868.jpg
Даже когда я изменить весь код:
class UserAvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
version :large do
process resize_to_fit: [ 600, 600 ], convert: :jpg
end
version :small do
process resize_to_fill: [ 216, 216 ], convert: :jpg
end
version :thumb do
process resize_to_fill: [ 80, 80 ], convert: :png
end
version :tiny do
process resize_to_fill: [ 50, 50 ], convert: :png
end
end
Он сохраняет сохранение изображений с расширением jpg, WTF.
Я схожу с ума с этим какие-либо предложения?
UPDATE
Я попытался следующий код
class UserAvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
version :large do
process resize_to_fit: [ 600, 600 ], convert: :jpg
end
version :small do
process resize_to_fill: [ 216, 216 ], convert: :jpg
end
version :thumb do
process resize_to_fill: [ 80, 80 ], convert: :png
end
version :tiny do
process resize_to_fill: [ 50, 50 ], convert: :png
end
def filename
"#{secure_token}.#{file.extension}" if original_filename.present?
end
protected
def secure_token
var = :"@#{mounted_as}_secure_token"
model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid)
end
end
И загружать правильные изображения в S3, но затем user.avatar сохраняет все версии в .jpg WTF !!!!. Это действительно странно, что сейчас происходит ...
консоли:
> user = User.find(id)
> user.avatar.recreate_versions!
> user.save!
> user.avatar.large.url
=> "http://bucket.s3.amazonaws.../large_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.small.url
=> "http://bucket.s3.amazonaws.../small_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.thumb.url
=> "http://bucket.s3.amazonaws.../thumb_96a1f5a4-cf07-490f-9711-618e04071950.png"
> user.avatar.tiny.url
=> "http://bucket.s3.amazonaws.../tiny_96a1f5a4-cf07-490f-9711-618e04071950.png"
> reload!
> user = User.find(id)
> user.avatar.large.url
=> "http://bucket.s3.amazonaws.../large_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.small.url
=> "http://bucket.s3.amazonaws.../small_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.thumb.url
=> "http://bucket.s3.amazonaws.../thumb_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
> user.avatar.tiny.url
=> "http://bucket.s3.amazonaws.../tiny_96a1f5a4-cf07-490f-9711-618e04071950.jpg"
Я НЕНАВИЖУ ТЕБЯ CARRIERWAVE
Попробуйте определить метод имени файла внутри блока версии. Взгляните на эту проблему. Это может помочь вам: https://github.com/carrierwaveuploader/carrierwave/issues/378 –