我这里有一个大问题。我真的很努力,但我不能自己解决这个问题,所以我希望人们可以帮助我。
在谈论我的问题之前,我必须说我在我的项目中使用Paperclip和IMGKit,但我认为问题出在Paperclip上。
我创建了一个Rails Task
来从某些网站的主页拍摄快照。前段时间一切正常,但现在一切都下降了。我将我的真实数据库从Heroku导入到localhost(没有任何图像和回形针的迁移),运行迁移,从“公共/系统”中删除所有旧文件并再次运行我的任务(拍摄所有网站的快照)。
所以,现在我有了:
:styles
。我们来看看代码。假设我正在运行一项任务,将对我数据库中的所有站点执行此任务。这些网站在我的架构中被称为“项目”。
#config/environments/development.rb
# "which convert" give me this path
Paperclip.options[:command_path] = "/usr/local/bin/"
我的任务只是调用数据库中每个站点的“object.save”,因此我的代码从before_save
开始。
has_attached_file :image,
:styles => { :small => "200x147#" },
:convert_options => { :small => "-quality 75 -strip" },
:default_url => '/images/:style/bitcoin-earth.jpg'
before_save :generate_data
def generate_data
self.image = get_image(self.id, self.url_original)
end
# Take snapshot of the website
def get_image(filename, link)
kit = IMGKit.new(link.to_s, :quality => 100, :width => 1024, :height => 768)
file = Tempfile.new(["template_#{filename}", 'png'], 'tmp',
:encoding => 'ascii-8bit')
file.write(kit.to_img(:png))
file.flush
return file
end
<%= image_tag store.image.url %>
gem "paperclip"
如果我尝试运行rake paperclip:refresh:missing_styles
,任务完成得非常快,没有任何错误。但如果我尝试运行rake paperclip:refresh CLASS=Item
,我得到了:
Image Paperclip::Errors::NotIdentifiedByImageMagickError
是的,我已经搜索过了,但我没有为我的案例找到解决方案。
当我在项目中“检查元素”并尝试查看项目图像的来源时,我看到:
http://localhost:3000/public/system/items/images/000/000/216/original/template_21620140109-14507-1c0yszzpng?1389305824
但是如果我转到我的项目文件夹,我只会看到一个名为template_21620140109-21209-1yls03opng
的图像。注意那里不存在任何“?1389305824”。见上图。
嗯,我认为就是这样。可能是什么问题?我真的需要解决这个问题,请帮帮我:/
Item.rb(型号):
before_save :generate_data
def generate_data
file = File.open(get_image(self.id, self.url_original))
self.image = file
file.close
end
def get_image(filename, link)
kit = IMGKit.new(link.to_s, :quality => 100,
:width => 1024, :height => 768)
file = Tempfile.new(["template_#{filename}", '.png'], 'tmp',
:encoding => 'ascii-8bit')
file.write(kit.to_img(:png))
file.flush
return file
end
现在,在获取图像并保存在数据库上时,我在控制台上没有任何错误,但Paperclip仍然不生成我的:styles。当我去log/development.log
时,我可以看到这个错误,但我不知道我能做些什么来解决:
Command :: file -b --mime 'tmp/template_24320140110-17577-80zj1c.png'
Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/template_24320140110-17577-80zj1c20140110-17577-mqa2q3.png[0]'
[paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError>
我想我们越来越近了,请继续帮助我:)。
答案 0 :(得分:1)
我认为你的问题在这里:
template_21620140109-14507-1c0yszzpng?1389305824 #-> should have .png (not a valid image)
图片强>
这可能不是问题,但也许您可以简化您的方法以排除临时文件:
# Take snapshot of the website
def get_image(filename, link)
kit = IMGKit.new(link.to_s, :quality => 100, :width => 1024, :height => 768)
file = kit.to_file("system/temp/template_#{filename}")
return file
end
我认为问题在于ImageMagick没有被传递给“真实”文件,因此你得到了无法识别的图像问题