我正在尝试用回形针上传javascript文件并获取
No handler found for "application/javascript"
.../paperclip-3.2.0/lib/paperclip/io_adapters/registry.rb:19:in `handler_for'
.../paperclip-3.2.0/lib/paperclip/io_adapters/registry.rb:29:in `for'
.../paperclip-3.2.0/lib/paperclip/attachment.rb:91:in `assign'
.../paperclip-3.2.0/lib/paperclip.rb:196:in `block in has_attached_file'
我将此作为模板系统的一部分使用。作为seed.rb的一部分(所以我不会通过表单上传),我循环浏览目录中的文件,为每个文件创建一个新的Javascript对象,设置"路径"、"扩展名"one_answers"主体",然后回调设置验证前名为"源"的回形针附件和保存后名为"预览"的另一个附件。错误发生在self.preview = file
的compile_preview
中
models/javascript.rb
has_attached_file :source,
:default_style => :original,
:path => ":rails_root/tmp/:configured_path",
:url => ":configured_url",
:default_url => "/assets/missing.gif",
:use_timestamp => false,
:storage => :filesystem
before_validation :set_source
before_post_process { false }
after_save :compile_preview
validates :body, :presence => true,
:length => { :maximum => 500.kilobytes }
validates :path, :presence => true
validates :format, :presence => true,
:inclusion => ["js"]
validates :handler, :presence => true,
:inclusion => ["coffee", "js"]
def set_source
file = StringIO.new(self.body)
file.class.class_eval { attr_accessor :original_filename, :content_type }
file.original_filename = "#{File.basename(self.path)}.#{self.extension}"
file.content_type = "application/javascript"
self.source = file
end
def compile_preview
file = StringIO.new(self.render)
file.class.class_eval { attr_accessor :original_filename, :content_type }
file.original_filename = self.source_file_name
file.content_type = self.source_content_type
self.preview = file
self.save
end
我知道99%的方法是有效的,因为我在另一个模型中使用过它,但它只是"application/javascript"造成的问题。我也尝试过"text/plain"和旧的"text/javascript"mime类型,但也出现了同样的错误。
我以前没有提到有人以这种方式处理问题,回形针也没有提到
我使用的是Rails 3.2.8&回形针3.2.0
我的handler
属性可能与回形针冲突吗?
有人知道我这件事哪里不对吗?
原来我只需要休息一下,用全新的眼光看待它。
我缩短了上面的代码以更好地解释它,但这就是我实际拥有的:
def rendered_source_file
file = StringIO.new(self.render)
file.class.class_eval { attr_accessor :original_filename, :content_type }
file.original_filename = self.source_file_name
file.content_type = self.source_content_type
end
def compile_preview
self.preview = rendered_source_file
self.save
end
问题是rendered_source_file
,我应该返回file
而不是file.content_type
。
所以应该是:
def rendered_source_file
file = StringIO.new(self.render)
file.class.class_eval { attr_accessor :original_filename, :content_type }
file.original_filename = self.source_file_name
file.content_type = self.source_content_type
file
end
def compile_preview
self.preview = rendered_source_file
self.save
end