RMagick - S3 - Heroku,RMagick文件打开的问题

时间:2012-02-28 01:21:42

标签: ruby imagemagick sinatra rmagick padrino

我正在尝试从浏览器上传文件,然后从中制作一个缩略图,然后将两者都上传到s3。

 File.open(params[:file][:tempfile]) do |p|
      AWS::S3::Base.establish_connection!(
          :access_key_id     => settings.s3_key,
          :secret_access_key => settings.s3_secret)
      AWS::S3::S3Object.store(pic_name,p,settings.bucket,:access => :public_read)

      thumb = Magick::Image.read(p)
      thumb.crop_resized!(75, 75, Magick::NorthGravity)

      AWS::S3::Base.establish_connection!(
          :access_key_id     => settings.s3_key,
          :secret_access_key => settings.s3_secret)
      AWS::S3::S3Object.store(pic_name + "s",thumb,settings.bucket,:access => :public_read)

我已经尝试了大多数可能的代码组合以使其工作,但它给了我一个分段错误

c:0060 p:---- s:0261 b:0261 l:000260 d:000260 CFUNC  :read
c:0059 p:0117 s:0257 b:0257 l:002638 d:000256 BLOCK  /Users/gkay/Documents/yirmiyedi/web/banne/app/controllers/firsat.rb:33
c:0058 p:---- s:0253 b:0253 l:000252 d:000252 FINISH
c:0057 p:---- s:0251 b:0251 l:000250 d:000250 CFUNC  :open
c:0056 p:0190 s:0247 b:0247 l:002638 d:000246 LAMBDA /Users/gkay/Documents/yirmiyedi/web/banne/app/controllers/firsat.rb:27

因此,当RMagic尝试打开文件时,它就开始了。我尝试过很多像

这样的东西
thumb = Magick::Image.read(p).first or [0] etc but none of them worked.

有什么想法吗? params [:file]是保存文件的post param

4 个答案:

答案 0 :(得分:1)

我建议使用Mini Magick代替它 - 它使用的内存少得多,并且它的错误要少得多。我们在RMagick上遇到了很多问题,但没有任何迷你魔法。从一个切换到另一个非常容易。

答案 1 :(得分:0)

尝试添加

GC.start

代码顶部

答案 2 :(得分:0)

当我卸载了imagemagick,卸载了rmagick gem,安装了没有openmp的imagemagick,然后再次安装了rmagick gem时问题解决了。

答案 3 :(得分:0)

对于任何较新的访问者,ImageMagick目前在没有RMagick的情况下使用Heroku,因此无需将其包含在您的gemfile中。

但是,如果您使用的是Paperclip,则需要指定gem 'cocaine', '0.3.2',如此post中所述,因为其他一些版本无效。