У меня есть модель с CarrierWave пользователя:CarrierWave не экономили версии с пользовательским процессором
# app/models/video.rb
class Video < ActiveRecord::Base
mount_uploader :the_video, VideoUploader
end
Uploader выглядит следующим образом:
# app/uploaders/video_uploader.rb
class VideoUploader < CarrierWave::Uploader::Base
include CarrierWave::FLV
storage :file
def move_to_cache
true
end
def move_to_store
true
end
def store_dir
"uploads/#{model.class.to_s.underscore}/#{model.id}"
end
def extension_white_list
%w(avi mp4 mpg flv)
end
version :flv do
process :put_to => 'flv'
end
end
И самая интересная часть - пользовательский процессор:
# lib/carrier_wave/flv.rb
require 'streamio-ffmpeg'
module CarrierWave
module FLV
extend ActiveSupport::Concern
module ClassMethods
def put_to(format)
process :put_to => format
end
end
def put_to(format = 'flv')
directory = File.dirname(current_path)
tmp_path = File.join(directory, "tmpfile")
File.rename current_path, tmp_path
file = ::FFMPEG::Movie.new(tmp_path)
file.transcode(current_path, {audio_codec: 'copy', video_codec: 'copy'})
File.delete tmp_path
end
end
end
Следующий шаг:
irb(main):005:0> v = Video.new
irb(main):005:0> v.the_video = File.open('/path/to/video.mp4')
irb(main):005:0> v.save
irb(main):005:0> v.the_video.size
=> 0
irb(main):005:0> v.the_video.flv.size
=> 0
Почему CarrierWave не сохранил оригинальную и flv-версию?
И еще одно, когда я комментирую блок версии в video_uploader.rb - все работает нормально.
У меня проблема не в конвертации части. Например, если мы удалим содержимое метода put_to, оно не будет работать должным образом. – peanut
Да, и это будет только оригинальный формат? – uday
Да, в этом случае исходный файл не сохраняется :(Блок версии в video.rb тихо сломал даже первоначальное сохранение файла. – peanut