0

ペーパークリップで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オブジェクトを作成し、「パス」、「拡張子」、「本体」を設定してからコールバックは、検証前に「source」という名前のクリップの添付ファイルを設定し、保存後に「preview」という名前の別の添付ファイルを設定します。でエラーが発生しcompile_previewていますself.preview = file

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% が機能することはわかっていますが、問題を引き起こしているのは「アプリケーション/javascript」だけです。「text/plain」と古い「text/javascript」MIME タイプも試しましたが、同じエラーが発生します。

以前にこの方法でハンドラーに問題があったという人は誰も言及していませんし、ペーパークリップもそれについて言及していません。

Rails 3.2.8 と Paperclip 3.2.0 を使用しています

私のhandler属性がペーパークリップと競合している可能性はありますか?

これでどこが間違っているのか、誰かが洞察を持っていますか?

4

1 に答える 1

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
于 2012-09-12T01:00:46.740 に答える