您好我正在尝试使用paperclip和imagemagick裁剪照片。裁剪照片时我遇到了一些错误。以下是错误堆栈:
?[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
我的配置/环境/ dev.rb
Paperclip.options[:swallow_stderr] = false
Paperclip.options[:command_path] = "C:/Program Files/ImageMagick-6.7.9-Q16/"
当裁剪后更新照片时,它会进入循环状态。可能是什么解决方案?
答案 0 :(得分:3)
我很确定你遇到了我最初的问题,即重新处理!方法是保存ActiveRecord父级,然后触发after_update回调,这导致再次调用reprocess_photo方法。最终结果是一个有点递归的循环,直到你的机器耗尽可分配内存才会停止。
对此的简单修复是添加一个名为processing的布尔属性,它允许您确定我们是否已经在重新处理图像。
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
答案 1 :(得分:0)
尝试更改
Paperclip.options[:command_path] = "C:/Program Files/ImageMagick-6.7.9-Q16/"
到
Paperclip.options[:command_path] = 'C:/PROGRA~1/IMAGEM~1.0-Q'
似乎没有找到图像-Magick