2011-08-30 37 views
7

我使用carrierwave和mini_magick来上传图片。在开发中一切都很好,但在生产中,当我尝试上传图像时,它会提高FloatDomainError (Infinity)。我有几个项目在同一台服务器上托管,上传时一切正常。 我使用Rails 3.0.10。 任何想法如何解决它?谢谢FloatDomainError(Infinity)

回答

10

我有同样的问题。问题是mini_magick。如果它运行identify的图像文件是错误的,则识别将输出某种错误,例如,

identify: Corrupt JPEG data: 7929 extraneous bytes before marker 0xed `image.jpg' @ warning/jpeg.c/EmitMessage/230. 
11811 8665 

mini_magick试图解析错误消息作为尺寸,并且结果是0。这会导致除以0,这会导致您提到的例外。这就是为什么它只有一些图像失败的原因。

identify有一个-quiet选项来关闭这些警告消息。我在https://github.com/fschwahn/mini_magick分叉了mini_magick并添加了安静的选项。我希望这个变化能够被吸引(或者问题会以更加优雅的方式被修复)。但是,现在你可以通过添加以下到您的Gemfile用我的叉:

gem 'mini_magick', :git => 'git://github.com/fschwahn/mini_magick.git' 
+0

感谢您的回复。尽快尝试你的叉子。在当前的项目中,我开始使用rmagick来代替。 –

+1

我的更改已经完成,新版本的mini_magick已经发布,因此如果您依赖最新版本的mini_magick,问题应该消失。 – fabi

+0

谢谢。我会尽快尝试它=) –

1

修正了用resize_and_fill替换为resize_and_pad。仍然不明白它的奇怪行为。

+0

实际上'resize_to_fill'和resize_and_pad'有不同的效果。用另一个替换它只是让你的应用程序以任何价格运行的一种方式。 –

+0

同意。这是一个临时解决方案,只是为了使其工作。希望@ fabi的解决方案现在可以运作 –

0

我得到了这个错误,最新的宝石更新,当我生成我的PDF文件的图像缩略图。

此代码失败:

version :thumb do 
    process :resize_to_fill => [260, 192] 
    process :convert => :png 
    process :set_content_type 
    process :thumbnail_pdf 
end 

我解决它通过更换线的顺序。关键是,在调整大小之前,MiniMagic应先将缩略图转换为图像,然后再尝试调整大小。

这里是解决方案哪些为我工作。也许它会帮助某人。

process :convert => :png 
    process :resize_to_fill => [260, 192]