我正在尝试使用回形针和geting
上传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对象,设置'path','extension'和'body'然后回调在验证之前设置名为“source”的回形针附件,在保存之后设置另一个名为“preview”的附件。错误发生在compile_preview
self.preview = file
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
模型/ javascript.rb
handler
我知道其中99%有效,因为我已经将它与其他模型一起使用,但它只是“应用程序/ javascript”导致问题。我也尝试了“text / plain”和旧的“text / javascript”mime类型,但也得到了相同的错误。
我之前没有提到过任何人以这种方式遇到过处理问题而且回形针没有提及它。
我正在使用Rails 3.2.8& Paperclip 3.2.0
我的{{1}}属性是否与回形针发生冲突?
有没有人对我出错的地方有任何见解?
答案 0 :(得分:0)
原来我只需休息一下,用新鲜的目光看待它。
我缩短了上面的代码来更好地解释它,但这就是我实际拥有的:
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