我在编辑模型时遇到此错误,当我删除与之关联的图像时我选择了另一个:
Paperclip::NotIdentifiedByImageMagickError in Admin/packsController#update
Chrysanthemumprueba4.jpg is not recognized by the 'identify' command.
C:/Users/.../vendor/plugins/thoughtbot-paperclip-fc792c8/lib/paperclip/geometry.rb:24:in `from_file'
但是当我创建一个新包并为其选择图像时,它可以正常工作。
我有两个表:pack和pack_images,而pack_images包含相关包的照片,以下是关系:
class Pack < ActiveRecord::Base
has_many :pack_images, :dependent => :destroy
end
class PackImage < ActiveRecord::Base
belongs_to :pack
attr_accessor :height, :width
has_attached_file :photo, :url => "/:attachment/:class/:id/:style_:basename.:extension", :styles => {:principal => "240x240>", :original => "400x400>", ...}
end
这是控制器的操作,它会引发错误:
def update
@pack = Pack.find(params[:id])
@pack.pack_products
unless params[:pack][:pack_images_attributes].nil?
params[:pack][:pack_images_attributes].count.times do |i|
unless params[:pack][:pack_images_attributes][:"#{i.to_s}"][:photo].blank?
file = params[:pack][:pack_images_attributes][:"#{i.to_s}"][:photo]
dimensions = Paperclip::Geometry.from_file(file)
@pack.pack_images[i].width = dimensions.width
@pack.pack_images[i].height = dimensions.height
end
end
end
respond_to do |format|
@pack.update_attributes(params[:pack])
format.html { redirect_to(admin_pack_path(@pack.id), :notice => 'Pack updated') }
end
我注意到,在更新时,我获得的参数(仅照片名称)比创建时少(照片的名称,文件类型,宽度,高度等)。
我希望你能帮助我
非常感谢
答案 0 :(得分:2)
它曾经适用于pdf和图像,尝试了一个小时左右,之后我搜索了所有内容,我的模型中发现了问题has_attached_file :attachment
,
:styles => {:original=> "125x125#"}
不得不评论这一行,它适用于其他附件,如docx或odt等。
所以在你的情况下:styles => {:principal => "240x240>", :original => "400x400>"}
退房并发表评论。
答案 1 :(得分:1)
找到识别命令的路径,如下所示:
$ which identify
对我来说,上面的命令打印出来:/usr/local/bin/identify
在一些初始化文件中添加:
Paperclip::Attachment.default_options[:command_path] = "/usr/local/bin"
答案 2 :(得分:1)
发生此错误的一个原因是当您尝试确定不存在的图像的尺寸时:
回形针:: Geometry.from_file(无)
此命令将挂起并导致此错误。
答案 3 :(得分:0)
尝试在此图像上运行ImageMagick中的“识别”命令。这似乎与您的ImageMagick安装有关。
答案 4 :(得分:0)
我有完全相同的问题。 Windows 8 64位,Rails 4,ImageMagick-6.8.7-1-Q16-x64-static.exe。做这个 : 在rails应用程序的根目录中(来自Git Bash)
$ which identify
/c/Program Files/ImageMagick-6.8.7-Q16/./identify
然后
$ cd "/c/Program Files/ImageMagick-6.8.7-Q16"
不要忘记引号。将所有可执行文件复制到您的/ bin目录。我确实复制了所有这些文件。
$ cp * /bin
voila paperclip有效!