设定:
ruby 1.8.6
rails 2.2.2
attachment_fu - not sure (it's vendorized), but last entry in CHANGELOG is "Apr 17 2008"
aws-s3 (0.6.3)
aws-sdk (2.1.13)
aws-sdk-core (2.1.13)
aws-sdk-resources (2.1.13)
我有一个使用attachment_fu
的模型,如下所示:
has_attachment :storage => :s3,
:path_prefix => "vip_uploads#{("_"+RAILS_ENV) if RAILS_ENV != "production"}",
:max_size => 100.megabytes,
:processor => :mp3
s3的设置都设置正常 - 如果我删除了processor
选项,那么上传到s3就可以了。
我的mp3处理器将wav文件转换为mp3,如下所示:
module Technoweenie # :nodoc:
module AttachmentFu # :nodoc:
module Processors
module Mp3Processor
def self.included(base)
base.send :extend, ClassMethods
base.alias_method_chain :process_attachment, :processing
end
module ClassMethods
end
protected
def process_attachment_with_processing
self.convert_to_mp3
end
# Convert to mp3 and set some metadata
def convert_to_mp3(options={})
#do the conversion with ffmpeg
mp3_temp_path = "#{self.temp_path}.mp3"
cmd = "ffmpeg -i #{self.temp_path} -metadata title=\"#{self.filename.gsub("\.wav","")}\" -metadata artist=\"Vip Studio Sessions\" -metadata album=\"Uploads\" -vn -ar 44100 -ac 2 -ab 320k -f mp3 #{mp3_temp_path}"
`#{cmd}`
#copy this file back into temp_data
self.copy_to_temp_file(mp3_temp_path)
#update attributes
self.filename = self.filename.gsub(/\.wav$/,".mp3")
self.content_type = "audio/mpeg"
self.set_size_from_temp_path
end
end
end
end
end
所有转换内容似乎都有效,因为它在tmp文件夹中创建了一个新的mp3文件,文件名保存在mp3_temp_path
中,并在数据库中创建了一条记录。但由于某种原因,生成的文件不会被推送到s3。我有一种感觉,我只需要设置一些访问器来处理temp_data或temp_file等等。我试过这个
self.temp_path = mp3_temp_path
和
self.temp_data = File.read(mp3_temp_path)
和
self.temp_path = write_to_temp_file(File.read(mp3_temp_path))
目前,正如您在我的代码中所看到的,我正在尝试这样做:
self.copy_to_temp_file(mp3_temp_path)
但它们都不起作用。这些尝试是基于查看预先存在的处理器,例如rmagick,以及查看它们的作用。他们似乎和我做同样的事情,但由于所有这些都是关于缩略图,因此很容易在翻译中丢失一些东西。
任何人都能看到我失踪的东西吗?谢谢,Max
答案 0 :(得分:1)
好的,回答我自己的问题 - 新的一天带来的惊喜真是太棒了。我突然想到更仔细地查看attachment_fu源代码,其中我注意到了这一点......
def after_process_attachment
if @saved_attachment
if respond_to?(:process_attachment_with_processing) && thumbnailable? && !attachment_options[:thumbnails].blank? && parent_id.nil?
temp_file = temp_path || create_temp_file
attachment_options[:thumbnails].each { |suffix, size| create_or_update_thumbnail(temp_file, suffix, *size) }
end
save_to_storage
@temp_paths.clear
@saved_attachment = nil
callback :after_attachment_saved
end
end
我没有将此实例变量@saved_attachment
设置为true(或truthy),因此它不会继续save_to_storage
。它有点失败 - 记录仍然愉快地保存到数据库,它只是不存储文件。
总之,答案是,如果我对产生的mp3感到满意(即首先是mp3,或者我成功将其转换为mp3),那么我需要设置{{1}在我的处理器中。