5 Stimmen

Carrierwave - Fehler bei der Verarbeitung von Bildern

Das Problem ist der folgende Fehler, der bei Mongoids auftritt save! Aktion.

Mongoid::Errors::Validations: Validation failed - Img failed to be processed.
~/.rvm/gems/ruby-1.8.7-p249/gems/mongoid-2.0.0.rc.7/lib/mongoid/persistence.rb:234:in `fail_validate!'
~/.rvm/gems/ruby-1.8.7-p249/gems/mongoid-2.0.0.rc.7/lib/mongoid/persistence.rb:75:in `save!'
./app.rb:29:in `POST /upload'

Der Aufbau ist meist wie folgt:

require "sinatra"     # 1.1.2
require "mongoid"     # 2.0.0.beta.19
require "rmagick"     # 2.12.2
require "carrierwave" # 0.5.1
require "carrierwave/orm/mongoid"
require 'carrierwave/processing/rmagick'
....

Mongoid.database = Mongo::Connection.new('somehost', 1234).db('test')

class Uploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
  storage :file

  def store_dir
    "uploads"
  end

 process :resize_to_fit => [80, 80]
end

class Image
  include Mongoid::Document

  mount_uploader :img, Uploader
end

....

post '/upload' do
  @img = Image.new
  @img.img = params[:file]
  @img.save!
  redirect '/'
end

Die Störung liegt irgendwo in der Verarbeitung:

process :resize_to_fit => [80, 80]

Wenn ich diese Zeile entferne. Alles funktioniert wie erwartet.

7voto

Jonas Punkte 956

Ok, ich habe die Spuren nicht tief genug verfolgt: Das Problem war ein fehlendes jpeg-Delegat in ImageMagick. So schlug natürlich die Verarbeitung von jpeg-Dateien fehl.

Die Lösung bestand darin, ImageMagick aus dem Quellcode neu zu installieren.

Dennoch ist es ziemlich undurchsichtig, wenn Mongoid einen Fehler auslöst, der von carrierwave aufgerufen wird, weil es einen Fehler von RMagick erhält, der von ImageMagick ausgelöst wurde.

Trotzdem. Im Nachhinein ist es ziemlich offensichtlich :-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X