蜻蜓宝石 - 默认图像?

时间:2011-08-17 16:54:13

标签: ruby-on-rails ruby-on-rails-3 rmagick dragonfly-gem

我正在使用Dragonfly,并希望有一个默认图像,其缩放方式与缩略图相同。

我目前有以下代码,但是当Dragonfly使用 fetch_file 方法时,它会尝试处理缩略图,但生成的URL是死链接。

if listing.image
  image = listing.image.jpg
else
  image = Dragonfly[:images].fetch_file('/toekomst/images/speech-bubble.png')
end  
image_tag image.jpg.thumb(size).url, :class => "framed"

我找不到这方面的帮助,所以任何提示都非常感谢!谢谢!

3 个答案:

答案 0 :(得分:6)

您需要将配置值'allow_fetch_file'设置为true - 默认情况下,使用fetch_file通过服务器请求关闭安全性(除非此处没有特别说明: http://markevans.github.com/dragonfly/Dragonfly/Server.html 但是,如果你这样做,你可能应该将'protect_from_dos_attacks'打开为true,再次为安全起见:

Dragonfly[:images].configure do |c|
  # ...
  c.allow_fetch_file = true
  c.protect_from_dos_attacks = true
  c.secret = "some secret here..."
end

希望有所帮助

答案 1 :(得分:3)

您可以使用模型访问器设置默认图像:

class Photo
  dragonfly_accessor :image do
    default 'public/images/default.png'
  end
end

请参阅文档:http://markevans.github.io/dragonfly/models/#default-content

答案 2 :(得分:1)

我设法通过首先添加Mark提供的配置代码来解决这个问题。

然后我在日志中收到此错误:

identify: unable to open image `/toekomst/images/speech-bubble.png': No such file or directory @ error/blob.c/OpenBlob/2584.
identify: unable to open file `/toekomst/images/speech-bubble.png' @ error/png.c/ReadPNGImage/3079.
[2011-08-19 10:33:51] ERROR Dragonfly::FunctionManager::UnableToHandle: None of the functions registered with #<Dragonfly::Encoder:0x00000100d66d88> were able to deal with the method call encode(#<Dragonfly::TempObject:0x00000104aa2800 pathname=#<Pathname:/toekomst/images/speech-bubble.png> >,:jpg). You may need to register one that can.

由于ImageMagick似乎无法使用相对于项目的路径名,因此我必须分配一个绝对路径。像这样:

img = Dragonfly[:images].fetch_file(File.join(Rails.root, 'public', 'toekomst', 'images', 'speech-bubble.png'))