2012-10-24 37 views
11

Ho appena passato da un plugin per graffette a graffetta a una gemma a graffetta. Il progetto è un'applicazione di rail 2.3 e sto usando paperclip 2.7.2 gem.Errore file non trovato Paperclip

sto ottenendo il seguente errore strano:

identify: unable to open image `file': No such file or directory @ error/blob.c/OpenBlob/2617. 
identify: no decode delegate for this image format `file' @ error/constitute.c/ReadImage/544. 

sembra graffetta è alla ricerca di un file chiamato 'file', ma non sono sicuro perché. Non ho cambiato nulla del codice che avevamo prima. Ha funzionato, tutto ciò che ho fatto è stato l'aggiornamento a una versione più recente e utilizzare una gemma su un plugin.

Qualche idea?

Aggiornamento

Si tratta di un problema in graffetta in cui non analizza il contenuto del comando in modo corretto. Ho scavato in profondità nella sorgente di graffetta per trovare:

def run(cmd, arguments = "", local_options = {}) 
    if options[:image_magick_path] 
    Paperclip.log("[DEPRECATION] :image_magick_path is deprecated and will be removed. Use :command_path instead") 
    end 
    command_path = options[:command_path] || options[:image_magick_path] 
    Cocaine::CommandLine.path = [Cocaine::CommandLine.path, command_path].flatten.compact.uniq 
    local_options = local_options.merge(:logger => logger) if logging? && (options[:log_command] || local_options[:log_command]) 

    Cocaine::CommandLine.new(cmd, arguments, local_options).run 
end 

e

# Uses ImageMagick to determing the dimensions of a file, passed in as either a 
# File or path. 
# NOTE: (race cond) Do not reassign the 'file' variable inside this method as it is likely to be 
# a Tempfile object, which would be eligible for file deletion when no longer referenced. 
def self.from_file file 
    file_path = file.respond_to?(:path) ? file.path : file 
    raise(Paperclip::NotIdentifiedByImageMagickError.new("Cannot find the geometry of a file with a blank name")) if file_path.blank? 
    geometry = begin 
       Paperclip.run("identify", "-format %wx%h :file", :file => "#{file_path}[0]") 
      rescue Cocaine::ExitStatusError 
       "" 
      rescue Cocaine::CommandNotFoundError => e 
       raise Paperclip::CommandNotFoundError.new("Could not run the `identify` command. Please install ImageMagick.") 
      end 
    parse(geometry) || 
    raise(NotIdentifiedByImageMagickError.new("#{file_path} is not recognized by the 'identify' command.")) 
end 

Il comando Paperclip.run non riesce a sostituire il: file di segnaposto per qualche motivo. Ho verificato eseguendo il seguente sulla riga di comando:

identify :file 

scimmia patch la sostituzione con rendimenti mano altri errori in cui una cosa simile accade.

risposta

23

Ok, sono riuscito a risolverlo.

Era un problema con la cocaina. Sembra che la graffetta abbia una dipendenza dalla cocaina che dice solo che deve essere Cociana> 0,02. L'ultima versione di Cocaine 0.4.2 (al momento della stesura di questo documento) ha una nuova API che non è retrocompatibile. Devi effettuare il downgrade a Cocaine 0.3.2.

In poche parole questo in Gemfile prima graffetta:

gem "cocaine", "0.3.2" 
+2

L'uomo, è stato salvato il giorno per me :) – emilsw

+7

Anziché specificare la cocaina nel vostro Gemfile, è possibile imbattersi la versione 2.7.4 di graffetta per fissare anche questo. – Peter

+0

ottimo ragazzo! :) – user566245