Я пытаюсь перекодировать видеофайлы и загрузить их на s3. Чтобы сделать это, я пытаюсь использовать самоцвет для несущей-видео для транскодирования. Для загрузки я использую carrierwave, а для фоновой обработки я использую carrierwave-backgrounder с комбинацией activejob и sidekiq. После транскодирования видеофайл необходимо загрузить на S3. Однако проблема, с которой я столкнулся, заключается в том, что carrierwave-video не транскодирует видеофайлы, но видеофайлы по-прежнему загружаются в s3 в исходном формате. Я не понимаю, где ошибка, которая заставляет это не транскодировать. Может кто-нибудь сказать мне, что мне не хватает в плане создания файлов перекодировки carrierwave-video?
VideoUploader
class VideoUploader < CarrierWave::Uploader::Base
# Include RMagick or MiniMagick support:
# include CarrierWave::RMagick
# include CarrierWave::MiniMagick
include CarrierWave::MimeTypes
process :set_content_type
include CarrierWave::Video
process encode_video: [:mp4, resolution: "640x480", watermark: {}]
include ::CarrierWave::Backgrounder::Delay
# Choose what kind of storage to use for this uploader:
# storage :file
storage :fog
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
end
movie.rb
class Movie < ApplicationRecord
mount_uploader :video, VideoUploader
process_in_background :video
validates :title, presence: true, length: { minimum: 1, maximum: 30 },
uniqueness: { case_sensitive: false }
validates :year, presence: true, numericality: { only_integer: true }
validates :plot, presence: true, length: { minimum: 1, maximum: 1000 }
validates :video, presence: true
end
movies_controller.rb (создать)
def create
movie = Movie.new(movie_params)
if movie.save
VideoProcesserJob.perform_later(movie.id)
render json: movie, status: 201
else
render json: { errors: movie.errors }, status: 422
end
end
VideoProcesserJob.rb
class VideoProcesserJob < ApplicationJob
queue_as :default
def perform(movie_id)
movie = Movie.find(movie_id)
end
end