Paperclip:找不到“application / javascript”的处理程序

时间:2012-09-12 00:07:24

标签: ruby-on-rails ruby-on-rails-3 paperclip

我正在尝试使用回形针和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}}属性是否与回形针发生冲突?

有没有人对我出错的地方有任何见解?

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