2

こんにちは、ペーパークリップとイメージマジックを使用して写真をトリミングしようとしています。写真のトリミング中にエラーが発生しました。以下はエラースタックです:

?[32mCommand?[0m :: convert "C:/Users/Anand/AppData/Local/Temp/120120924-3568-tx
2bxy.jpg[0]" -crop 103x103+0+0 -auto-orient "C:/Users/Anand/AppData/Local/Temp/1
20120924-3568-tx2bxy20120924-3568-16dij9c"
?[32mCommand?[0m :: file -b --mime "C:/Users/Anand/AppData/Local/Temp/120120924-
3568-tx2bxy20120924-3568-16dij9c"
[paperclip] Error while determining content type: Cocaine::CommandNotFoundError
?[32mCommand?[0m :: identify -format %wx%h "C:/Users/Anand/AppData/Local/Temp/12
0120924-3568-tx2bxy.jpg[0]"
  ?[1m?[36m (0.0ms)?[0m  ?[1mrollback transaction?[0m
Completed 500 Internal Server Error in 145552ms

NoMethodError (undefined method `exitstatus' for nil:NilClass):
  app/models/user.rb:14:in `reprocess_photo'
  app/models/user.rb:14:in `reprocess_photo'
  app/models/user.rb:14:in `reprocess_photo'
  app/models/user.rb:14:in `reprocess_photo'
  app/models/user.rb:14:in `reprocess_photo'
  app/models/user.rb:14:in `reprocess_photo'
  app/models/user.rb:14:in `reprocess_photo'
  app/controllers/users_controller.rb:67:in `block in update'
  app/controllers/users_controller.rb:66:in `update'


  Rendered E:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispa
tch/middleware/templates/rescues/_trace.erb (10.0ms)
  Rendered E:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispa
tch/middleware/templates/rescues/_request_and_response.erb (1.0ms)
  Rendered E:/Ruby192/lib/ruby/gems/1.9.1/gems/actionpack-3.2.8/lib/action_dispa
tch/middleware/templates/rescues/diagnostics.erb within rescues/layout (51.0ms)
Exiting

model/user.rb ファイル:

class User < ActiveRecord::Base
  attr_accessible :name,:photo,:crop_x,:crop_y,:crop_w,:crop_h
  has_attached_file :photo,:styles => {:small=>"100x100#",:large=>"500x500>"},:processors => [:cropper]
  attr_accessor :crop_x,:crop_y,:crop_w,:crop_h
  after_update :reprocess_photo,:if=>:cropping?

  def cropping?
    !crop_x.blank? && !crop_y.blank? && !crop_w.blank? && !crop_h.blank?
  end

  private 

  def reprocess_photo
    photo.reprocess!
  end

end

私のlib/paperclip_processros/cropper.rb

module Paperclip
  class Cropper < Thumbnail
    def transformation_command
      if crop_command   
        #this generates command :
        #this is right #convert "C:/Users/Anand/AppData/Local/Temp/1.jpg[0]" -crop 102x102+0+0 -auto-orient "C:/Users/Anand/AppData/Local/Temp/120120924-2336-qbzroo20120924-2336-1jqbiiv.jpg"
        crop_command + super.first.sub(/ -crop \S+/, '')
      else
        super
      end
    end

    def crop_command
      target = @attachment.instance
      if target.cropping?
        " -crop #{target.crop_w}x#{target.crop_h}+#{target.crop_x}+#{target.crop_y} "
      end
    end
  end
end

私のconfig/env./dev.rb

 Paperclip.options[:swallow_stderr] = false
 Paperclip.options[:command_path] = "C:/Program Files/ImageMagick-6.7.9-Q16/"

トリミング後に写真を更新すると、ループに入ります。解決策は何ですか?

4

2 に答える 2

3

私が最初に抱えていたのと同じ問題に遭遇していると確信しています。メソッドは ActiveRecord の親を保存していましたが、それが after_update コールバックをトリガーしていたため、 reprocess_photo メソッドが再度呼び出されました。最終結果は、マシンが割り当て可能なメモリを使い果たすまで停止しない、幾分再帰的なループです。

これを簡単に修正するには、処理と呼ばれるブール属性を追加します。これにより、画像を既に再処理しているかどうかを判断できます。

attr_accessor :processing

次に、 reprocess_photo を変更して、画像が既に処理されている場合に返すようにします。

  def reprocess_photo
    # don't crop if the user isn't updating the photo
    #   ...or if the photo is already being processed
    return unless (cropping? && !processing)
    self.processing = true
    photo.reprocess!
    self.processing = false
  end
于 2012-10-30T19:38:11.927 に答える
0

変更してみる

 Paperclip.options[:command_path] = "C:/Program Files/ImageMagick-6.7.9-Q16/"

  Paperclip.options[:command_path] = 'C:/PROGRA~1/IMAGEM~1.0-Q'

image-Magick が見つからないようです

于 2012-09-28T21:19:16.153 に答える