使用Ruby Tempfile的RMagick / ImageMagick错误“此图像格式无解码委托”

时间:2010-11-01 00:36:16

标签: ruby-on-rails ruby imagemagick rmagick

我在使用RMagick / ImageMagick打开通过Rails表单上传的文件时遇到问题。我相信这是因为Rails Tempfile行为是为了消除文件扩展名。根据我的阅读,ImageMagick应该更喜欢使用幻数而不是文件扩展名来检测图像文件格式,但在我的安装中似乎并非如此。我这样做:

img = Magick::Image.read(full_size_image.path)

其中full_size_image是从上传表单控制器返回的Tempfile对象,它会产生如下错误:

  

此图像格式没有解码委托`/ var / folders / uI / uIsldaxoHkiXKWYFuTWs4 ++++ TI / -Tmp- / RackMultipart20101031-10144-1hiwlw-0'@ error / construct.c / ReadImage / 532

这是在Mac OS X 10.6上发生的,包括Rails 2.3.8,RMagick 2.13.1和ImageMagick 6.6.5-5。我已经确认ImageMagick可以转换我一直用来通过上传表单成功测试的文件,并且tempfile路径/文件实际存在/可读。

我怀疑a)我的ImageMagick安装中的某些东西是以某种方式阻止它使用幻数来检测文件类型(?? - 从源头获取ImageMagick从Snow Leopard工作本身就是冒险)或者b)只是如果这不起作用,我不知何故需要让Tempfile保留原始文件扩展名。

我知道我可以从Tempfile对象中获取原始文件名,但我还没有找到重命名文件的方法。我想我可以使用File对象制作一些kludge,并以某种方式创建一个带有原始扩展名的Tempfile的副本,但这看起来似乎不合时宜。什么是解决这个问题的正确方法?

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

我发现了问题 - 在我的shell中正确设置了DYLD_LIBRARY_PATH环境变量,我正在测试转换器的命令行版本,但是我的Mongrel服务器运行的位置没有正确设置。我修好后,开始工作了。