2012-09-12 27 views
0

我想上傳用回形針javascript文件和歌廳回形針:沒有處理程序發現「應用程序/ 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_previewself.preview = file

模型發生/ 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%的工作,因爲我與其他模型中使用它,但它只是「應用程序/ JavaScript的」,這正在造成問題。我也嘗試過「text/plain」和舊的「text/javascript」MIME類型,但得到相同的錯誤。

我沒有看到任何人以這種方式處理問題,而回形針沒有提到它。

我用Rails 3.2.8 &回形針3.2.0

難道我handler屬性與回形針相沖突?

有沒有人有任何見解我要去哪裏錯了?

回答

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,我應該返回filefile.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 
相關問題