Ruby on rails 回形针--保存新附件而不删除旧附件
我正在Rails 3上使用回形针(带Amazon s3)。我想在不替换旧文件的情况下将新文件附加到模型。我不想让旧文件被访问,我只想让它在s3上作为备份。 你知道有没有办法让回形针自己去处理它 在post.rb中,我有:Ruby on rails 回形针--保存新附件而不删除旧附件,ruby-on-rails,paperclip,Ruby On Rails,Paperclip,我正在Rails 3上使用回形针(带Amazon s3)。我想在不替换旧文件的情况下将新文件附加到模型。我不想让旧文件被访问,我只想让它在s3上作为备份。 你知道有没有办法让回形针自己去处理它 在post.rb中,我有: has_attached_file :sound, :storage => :s3, :s3_credentials => "....", :styles => {:mp3 => {:format =>
has_attached_file :sound,
:storage => :s3,
:s3_credentials => "....",
:styles => {:mp3 => {:format => :mp3}},
:processors => [:sound_processor],
:s3_host_alias => '....',
:bucket => '....',
:path => ":attachment/:id/:style/out.:extension",
:url => ":s3_alias_url"
处理器如下所示:
class Paperclip::SoundProcessor < Paperclip::Processor
def initialize file, options = {}, attachment = nil
super
@format = options[:format] || "mp3"
@current_format = File.extname(@file.path)
@basename = File.basename(@file.path, @current_format)
end
def make
src = @file
dst = Tempfile.new([@basename,".#{@format}"])
dst.binmode
cmd = "ffmpeg -y -ab 128k -t 600 -i #{File.expand_path(src.path)} #{File.expand_path(dst.path)}"
Paperclip.log(cmd)
out = `#{cmd}`
raise Paperclip::PaperclipError, "processor does not accept the given audio file" unless $?.exitstatus == 0
dst
end
end
类曲别针::声音处理器<曲别针::处理器
def初始化文件,选项={},附件=nil
超级的
@格式=选项[:格式]| |“mp3”
@当前_格式=File.extname(@File.path)
@basename=File.basename(@File.path,@current\u格式)
结束
def制造
src=@file
dst=Tempfile.new([@basename,“.#{@format}]”)
dst.binmode
cmd=“ffmpeg-y-ab 128k-t 600-i#{File.expand#u path(src.path)}{File.expand#u path(dst.path)}”
回形针日志(cmd)
out=`{cmd}`
升起回形针::回形针或,“处理器不接受给定的音频文件”,除非$?。exitstatus==0
dst
结束
结束
我就是这么做的。我在保存文件名之前给文件名加上时间戳(以防止另一个同名文件覆盖原始文件),并强制回形针从不删除任何内容
before_create :timestamp_filename
def timestamp_filename
fname = Time.now.to_s(:db).gsub(/[^0-9]/,'') + '_' + sound_file_name
sound.instance_write(:file_name, fname)
end
# override paperclip's destroy files
# method to always keep them around
def destroy_attached_files
true
end
将版本控制添加到模型中非常简单,最近我使用用户CarrierWave和in组合来实现这一点。我们部署到Heroku,所以S3也在其中
我之所以将此作为答案发布,是因为,尽管存在争议,但我不认为像曲别针这样的库应该支持文件备份,专门解决此问题的库对我个人来说感觉更好。这里有一个很好的资源,您可以查看: 它创建文件的新版本。希望这有帮助