我配置了自己的网站,以便在后台自动呈现不同版本的视频。它实际上工作得很好。如果视频在三种不同的转码中成功,它将发送成功的电子邮件。但是,如果它生成错误,它将发送失败的电子邮件。我遇到的问题是我试图将自我传递给Action Mailer,这样我至少可以给出成功或失败的视频名称。但是,看起来self是空的。
模型
def video_success(format, opts)
VideoMailer.video_success(self).deliver
end
def video_rescue(format, opts)
VideoMailer.video_error(self).deliver
end
上载
version :mp4 do
process :encode_video => [:mp4, callbacks: {rescue: :video_rescue} ]
def full_filename(for_file)
"#{File.basename(for_file, File.extname(for_file))}.mp4"
end
end
version :webm do
process :encode_video => [:webm, callbacks: { after_transcode: :video_success, rescue: :video_rescue }]
def full_filename(for_file)
"#{File.basename(for_file, File.extname(for_file))}.webm"
end
end
有关如何实现这一点的任何想法?此外,如果出现错误,最好返回生成的错误消息。
其次,每个用户模型都有一个电子邮件地址。上传视频的用户应该会收到电子邮件地址。但是,我在模型中使用current_user时遇到问题。我认为它也与背景资料有关,因为该信息不会传递给后台进程。
答案 0 :(得分:2)
我在后台处理器的末尾添加了一个类方法
process_in_background :video, ParanoidVideo
在models目录中,我创建了paranoid_video.rb
并引用了邮件的传递。这样,Carrierwave_Backgrounder正在处理成功方法而不是Carrierwave-Video。
class ParanoidVideo < ::CarrierWave::Workers::ProcessAsset
def success(job)
VideoMailer.video_backgrounder(job).deliver
end
end
我最终在数据库中创建了一个名为last_updated_by
的新字段,并使用它来返回正在调用的用户。当然,这是在拉动用户时对数据库的额外调用,但我发现这足以满足我的目的。后台处理器静态返回一致的处理程序,因此我只能拆分行和gsub来获取ID。 to_i
将拉出第一个数值,在我的情况下,它始终是视频ID。
def video_backgrounder(job)
@job = job
@video = Video.find_by_id(@job.handler.split("\n")[2].gsub("id: '","").to_i)
@user = User.find_by_id(@video.last_updated_by)
mail(:to => @user.email, :subject => "Video Transcoding Successful")
end