2010-05-14 187 views
69

我已经在一个小时的较长时间里试图弄清楚这里发生了什么问题,并且我确信(或者更确切地说)这是我忽视的一些相当明显的东西。我使用的是Ruby 1.9.1,Sinatra 1.0和RMagick 2.13.1。 ImageMagick和RMagick安装正确并且功能正常 - 我已经成功处理并保存了来自irb的图像。为什么此RMagick调用会产生分段错误?

参数数组的相关部分(格式化为可读性起见变化):

{"admin_user_new_image_file"=> 
    { 
     :filename=>"freddie-on-shetland-pony.png", 
     :type=>"image/png", 
     :name=>"admin_user_new_image_file", 
     :tempfile=>#<File:/var/folders/a7/a7pO5jMcGLCww9XBGRvWfE+++TI/-Tmp-/RackMultipart20100514-20700-o2tkqu-0>, 
     :head=>"Content-Disposition: form-data; name=\"admin_user_new_image_file\"; filename=\"freddie-on-shetland-pony.png\"\r\nContent-Type: image/png\r\n" 
    } 
} 

相关的代码:

post "/admin/user/:account_name/image/new/" do 
    if params[:admin_user_new_image_file][:tempfile] 
    thumbnail = Magick::Image.read("png:"+params[:admin_user_new_image_file][:tempfile].path).first 
    end 
end 

误差(线229的线开始“ thumbnail =“:

config.ru:229: [BUG] Segmentation fault 
ruby 1.9.1p376 (2009-12-07 revision 26041) [i386-darwin10.3.0] 

-- control frame ---------- 
c:0042 p:---- s:0196 b:0196 l:000195 d:000195 CFUNC :read 
c:0041 p:0121 s:0192 b:0192 l:001ab8 d:000191 LAMBDA config.ru:229 
c:0040 p:---- s:0189 b:0189 l:000188 d:000188 FINISH 
c:0039 p:---- s:0187 b:0187 l:000186 d:000186 CFUNC :call 
c:0038 p:0018 s:0184 b:0184 l:001d78 d:000183 BLOCK /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:865 
c:0037 p:---- s:0182 b:0182 l:000181 d:000181 FINISH 
c:0036 p:---- s:0180 b:0180 l:000179 d:000179 CFUNC :instance_eval 
c:0035 p:0016 s:0177 b:0175 l:000174 d:000174 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:521 
c:0034 p:0024 s:0171 b:0171 l:000148 d:000170 BLOCK /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:500 
c:0033 p:---- s:0169 b:0169 l:000168 d:000168 FINISH 
c:0032 p:---- s:0167 b:0167 l:000166 d:000166 CFUNC :catch 
c:0031 p:0140 s:0163 b:0163 l:000148 d:000162 BLOCK /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:497 
c:0030 p:---- s:0154 b:0154 l:000153 d:000153 FINISH 
c:0029 p:---- s:0152 b:0152 l:000151 d:000151 CFUNC :each 
c:0028 p:0073 s:0149 b:0149 l:000148 d:000148 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:476 
c:0027 p:0076 s:0141 b:0141 l:000140 d:000140 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:601 
c:0026 p:0009 s:0137 b:0137 l:000138 d:000136 BLOCK /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:411 
c:0025 p:---- s:0135 b:0135 l:000134 d:000134 FINISH 
c:0024 p:---- s:0133 b:0133 l:000132 d:000132 CFUNC :instance_eval 
c:0023 p:0012 s:0130 b:0130 l:000121 d:000129 BLOCK /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566 
c:0022 p:---- s:0128 b:0128 l:000127 d:000127 FINISH 
c:0021 p:---- s:0126 b:0126 l:000125 d:000125 CFUNC :catch 
c:0020 p:0013 s:0122 b:0122 l:000121 d:000121 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566 
c:0019 p:0098 s:0115 b:0115 l:000138 d:000138 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:411 
c:0018 p:0019 s:0108 b:0108 l:000107 d:000107 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:399 
c:0017 p:0014 s:0104 b:0104 l:000103 d:000103 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/showexceptions.rb:24 
c:0016 p:0150 s:0098 b:0098 l:000097 d:000097 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/methodoverride.rb:24 
c:0015 p:0031 s:0092 b:0092 l:000091 d:000091 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/commonlogger.rb:18 
c:0014 p:0018 s:0084 b:0084 l:002080 d:000083 BLOCK /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:979 
c:0013 p:0032 s:0082 b:0082 l:000081 d:000081 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:1005 
c:0012 p:0011 s:0078 b:0078 l:002080 d:002080 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:979 
c:0011 p:0100 s:0074 b:0074 l:000ff0 d:000ff0 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/lint.rb:47 
c:0010 p:0022 s:0068 b:0068 l:000067 d:000067 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/lint.rb:35 
c:0009 p:0014 s:0064 b:0064 l:000063 d:000063 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/showexceptions.rb:24 
c:0008 p:0031 s:0058 b:0058 l:000057 d:000057 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/commonlogger.rb:18 
c:0007 p:0014 s:0050 b:0050 l:000049 d:000049 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/content_length.rb:13 
c:0006 p:0320 s:0042 b:0042 l:000041 d:000041 METHOD /usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/handler/webrick.rb:48 
c:0005 p:0256 s:0030 b:0030 l:000029 d:000029 METHOD /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:111 
c:0004 p:0382 s:0020 b:0020 l:000019 d:000019 METHOD /usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:70 
c:0003 p:s:0009 b:0009 l:000bc8 d:000008 BLOCK /usr/local/lib/ruby/1.9.1/webrick/server.rb:183 
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH 
c:0001 p:---- s:0002 b:0002 l:000001 d:000001 TOP 
--------------------------- 
-- Ruby level backtrace information----------------------------------------- 
config.ru:229:in `read' 
config.ru:229:in `block (2 levels) in <main>' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:865:in `call' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:865:in `block in route' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:521:in `instance_eval' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:521:in `route_eval' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:500:in `block (2 levels) in route!' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:497:in `catch' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:497:in `block in route!' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:476:in `each' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:476:in `route!' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:601:in `dispatch!' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:411:in `block in call!' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `instance_eval' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `block in invoke' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `catch' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:566:in `invoke' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:411:in `call!' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:399:in `call' 
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/showexceptions.rb:24:in `call' 
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/methodoverride.rb:24:in `call' 
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/commonlogger.rb:18:in `call' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:979:in `block in call' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:1005:in `synchronize' 
/usr/local/lib/ruby/gems/1.9.1/gems/sinatra-1.0/lib/sinatra/base.rb:979:in `call' 
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/lint.rb:47:in `_call' 
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/lint.rb:35:in `call' 
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/showexceptions.rb:24:in `call' 
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/commonlogger.rb:18:in `call' 
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/content_length.rb:13:in `call' 
/usr/local/lib/ruby/gems/1.9.1/gems/rack-1.1.0/lib/rack/handler/webrick.rb:48:in `service' 
/usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:111:in `service' 
/usr/local/lib/ruby/1.9.1/webrick/httpserver.rb:70:in `run' 
/usr/local/lib/ruby/1.9.1/webrick/server.rb:183:in `block in start_thread' 

-- C level backtrace information ------------------------------------------- 
0x10010cd8d 0 libruby.dylib      0x000000010010cd8d rb_vm_bugreport + 77 
0x10002b184 1 libruby.dylib      0x000000010002b184 report_bug + 260 
0x10002b318 2 libruby.dylib      0x000000010002b318 rb_bug + 200 
0x1000b7124 3 libruby.dylib      0x00000001000b7124 sigsegv + 132 
0x7fff8301c80a 4 libSystem.B.dylib     0x00007fff8301c80a _sigtramp + 26 
0x1032313ac 5 libMagickCore.3.dylib    0x00000001032313ac Splay + 300 
0x103119245 6 libMagickCore.3.dylib    0x0000000103119245 AcquirePixelCache + 325 
0x1031cb317 7 libMagickCore.3.dylib    0x00000001031cb317 AcquireImage + 375 
0x10333035b 8 libMagickCore.3.dylib    0x000000010333035b ReadPNGImage + 155 
0x1031418fd 9 libMagickCore.3.dylib    0x00000001031418fd ReadImage + 2221 
0x101f1b72b 10 RMagick2.bundle      0x0000000101f1b72b rd_image + 339 
0x101f1b59b 11 RMagick2.bundle      0x0000000101f1b59b Image_read + 36 
0x1000fd0e4 12 libruby.dylib      0x00000001000fd0e4 vm_call_cfunc + 340 
0x1000fe9b0 13 libruby.dylib      0x00000001000fe9b0 vm_call_method + 896 
0x1000ff8fc 14 libruby.dylib      0x00000001000ff8fc vm_exec_core + 3180 
0x100104b93 15 libruby.dylib      0x0000000100104b93 vm_exec + 1203 
0x100106643 16 libruby.dylib      0x0000000100106643 rb_vm_invoke_proc + 691 
0x100106ccd 17 libruby.dylib      0x0000000100106ccd vm_call0 + 1085 
0x1000317c6 18 libruby.dylib      0x00000001000317c6 rb_method_call + 406 
0x1000fd0e4 19 libruby.dylib      0x00000001000fd0e4 vm_call_cfunc + 340 
0x1000fe9b0 20 libruby.dylib      0x00000001000fe9b0 vm_call_method + 896 
0x1000ff8fc 21 libruby.dylib      0x00000001000ff8fc vm_exec_core + 3180 
0x100104b93 22 libruby.dylib      0x0000000100104b93 vm_exec + 1203 
0x100105ce6 23 libruby.dylib      0x0000000100105ce6 yield_under + 710 
0x100106188 24 libruby.dylib      0x0000000100106188 specific_eval + 72 
0x1000fd0e4 25 libruby.dylib      0x00000001000fd0e4 vm_call_cfunc + 340 
0x1000fe9b0 26 libruby.dylib      0x00000001000fe9b0 vm_call_method + 896 
0x1000ff8fc 27 libruby.dylib      0x00000001000ff8fc vm_exec_core + 3180 
0x100104b93 28 libruby.dylib      0x0000000100104b93 vm_exec + 1203 
0x10010b6bf 29 libruby.dylib      0x000000010010b6bf rb_f_catch + 639 
0x1000fd0e4 30 libruby.dylib      0x00000001000fd0e4 vm_call_cfunc + 340 
0x1000fe9b0 31 libruby.dylib      0x00000001000fe9b0 vm_call_method + 896 
0x1000ff8fc 32 libruby.dylib      0x00000001000ff8fc vm_exec_core + 3180 
0x100104b93 33 libruby.dylib      0x0000000100104b93 vm_exec + 1203 
0x10010aac9 34 libruby.dylib      0x000000010010aac9 rb_yield + 505 
0x100007902 35 libruby.dylib      0x0000000100007902 rb_ary_each + 82 
0x1000fd0e4 36 libruby.dylib      0x00000001000fd0e4 vm_call_cfunc + 340 
0x1000fe9b0 37 libruby.dylib      0x00000001000fe9b0 vm_call_method + 896 
0x1000ff8fc 38 libruby.dylib      0x00000001000ff8fc vm_exec_core + 3180 
0x100104b93 39 libruby.dylib      0x0000000100104b93 vm_exec + 1203 
0x100105ce6 40 libruby.dylib      0x0000000100105ce6 yield_under + 710 
0x100106188 41 libruby.dylib      0x0000000100106188 specific_eval + 72 
0x1000fd0e4 42 libruby.dylib      0x00000001000fd0e4 vm_call_cfunc + 340 
0x1000fe9b0 43 libruby.dylib      0x00000001000fe9b0 vm_call_method + 896 
0x1000ff8fc 44 libruby.dylib      0x00000001000ff8fc vm_exec_core + 3180 
0x100104b93 45 libruby.dylib      0x0000000100104b93 vm_exec + 1203 
0x10010b6bf 46 libruby.dylib      0x000000010010b6bf rb_f_catch + 639 
0x1000fd0e4 47 libruby.dylib      0x00000001000fd0e4 vm_call_cfunc + 340 
0x1000fe9b0 48 libruby.dylib      0x00000001000fe9b0 vm_call_method + 896 
0x1000ff8fc 49 libruby.dylib      0x00000001000ff8fc vm_exec_core + 3180 
0x100104b93 50 libruby.dylib      0x0000000100104b93 vm_exec + 1203 
0x100106643 51 libruby.dylib      0x0000000100106643 rb_vm_invoke_proc + 691 
0x100111803 52 libruby.dylib      0x0000000100111803 thread_start_func_2 + 835 
0x100111921 53 libruby.dylib      0x0000000100111921 thread_start_func_1 + 17 
0x7fff82ff58b6 54 libSystem.B.dylib     0x00007fff82ff58b6 _pthread_start + 331 
0x7fff82ff5769 55 libSystem.B.dylib     0x00007fff82ff5769 thread_start + 13 

[NOTE] 
You may encounter a bug of Ruby interpreter. Bug reports are welcome. 
For details: http://www.ruby-lang.org/bugreport.html 

Abort trap 

任何人有任何想法发生了什么事?谢谢!

+1

我可以证实这一点也发生在1.9.2-rc1和rc2上。 – 2010-07-16 07:27:14

+0

我可能会感到困惑,但我有点惊讶它的作品。 #号不会导致“tempfile:”行的其余部分成为注释吗?它看起来像你没有分配任何临时值。 Ruby 1.8和1.9可能以不同方式处理“#<...>”组合吗? – AaronM 2010-05-15 23:27:51

+0

问题中的第一个代码片段可能仅仅是'logger.debug'的结果,在这种情况下'#'的语法只是描述':tempfile'键的值是'File'的一个实例。这样想:如果这是一个真正的评论,那么描述的散列将是一个语法错误:) – rfunduk 2010-12-10 13:34:15

回答

1

更新:这本身并不是一个真正的答案(我仍然在MRI 1.9.1中看到同样的问题),但是我使用RVM来获得我的MRI 1.8.7安装和宝石的最新信息,尝试运行它,并且一切都很完美。我认为问题在于RMagick还不完全兼容1.9.1,尽管文档特别提到了Ruby 1.9的支持。

3

该崩溃可能是由于在OSX MacPorts下的线程上访问ImageMagick。 见post

+1

我有这个相同的问题与1.9.1,1.9.2-rc1和1.9.2-rc2 - 我使用自制软件所以我所做的只是编辑brew文件并删除添加'--disable-openmp'(我的系统中的第58行)的条件,然后安装,并将其固定! – 2010-07-16 07:26:36

92

要扩大马修野人的评论,这样做:

brew install imagemagick --disable-openmp 

,并再次开始工作。无需编辑文件。 (我不知道如果多数民众赞成什么他实际上是在说,或者如果他的说法删除的标志,但上述自制命令适用于我的OSX 10.6)

如果您已经安装的ImageMagick然后

brew uninstall imagemagick && brew install imagemagick --disable-openmp 

brew upgrade -f不再重新安装,所以你必须先卸载它。)

+0

Ash柏林,你救了我最大的头痛...... – 2010-10-15 07:51:22

+1

brew安装-f imagemagick --disable-openmp没有为我工作。我在osx上(达尔文内核版本10.6.0)。我试图删除imagemagick并重新安装,它不适合我。另一种方法是使用mini_magick gem而不是rmagick,如https://github.com/jnicklas/carrierwave/issues/185 – thekindofme 2011-03-15 09:08:24

+0

中所述。非常感谢那个提示。有没有为这个自制软件或imagemagick的错误? – 2011-08-15 15:49:12

30

对于那些使用MacPorts,ImageMagick 6.6.5和Ruby 1.9.2。

  1. port uninstall ImageMagick
  2. port edit ImageMagick
  3. 添加--disable-openmpconfigure.args(近线100)
  4. port install ImageMagick
  5. 删除,然后重新安装rmagick

为我工作:)

+2

同样的情况,在这里。你的解决方案工作 – 2011-10-02 05:36:21

+0

我不明白在这个答案中的第3步。后我做了sudo端口编辑ImageMagick,它只是给了我一些ImageMagick的基本信息,如许可证,版本等,你可以详细说明一下。谢谢。 – Leahcim 2012-02-26 17:24:25

+0

嘿@Michael,我的系统上没有MacPorts(已经切换到Homebrew),所以我无法一步步地帮你解决问题。端口编辑应该打开Portfile,你应该在第100行附近找到提到的变量,然后你可以插入--disable-openmp。其他人能帮助迈克尔更详细的步骤3吗? – captainpete 2012-02-27 11:40:47

0

我试过CaptainPete的MacPorts解决方案。它建立了6.6.6-0,仍然有同样的问题。切换到酿造做构建做了诀窍。请注意,brew建立了6.6.4-5。在6.6.6中可能有多个错误或一个新的错误会导致类似的问题发生。

5

我有一个类似的问题,使用轨道3载波在OS X 10.6和红宝石1.9.2,也崩溃在每次调用时读取需要调整大小的图像。做:

brew uninstall imagemagick 
brew install imagemagick --disable-openmp 

为我解决了这个问题。

2

不是一个答案,只是我的经验:

我以我个人的项目之一无意中发现了这个问题。我在使用ruby-1.9.2-p0和ruby-1.9.2-p136的os x(雪豹)上遇到了这个问题。

对我来说特别令人困惑的是,我可以通过rails控制台使用rmagick读取图像。但是当我从我的导轨应用程序中找到完全相同的行时,它会按照上面所述的相同方式打开。

如上所述通过自制软件重建imagemagick对我来说还不够。我也必须删除rmagick gem并通过捆绑来重建它。

33

我在运行Ruby 1.9.2p180的OS X 10.6.7上遇到了非常类似的问题。

若要扩展Ash Berlin的评论,如果您使用的是自制软件包管理器,则需要先卸载imagemagick软件包,同时还要删除缓存,然后才能正常工作。

卸载的ImageMagick:

brew remove imagemagick 

删除缓存:

rm -rf `brew --cache imagemagick` 

然后使用该标志重新安装软件包:

brew install -f imagemagick --disable-openmp 
+1

完全相同的问题,但在Mac OS 10.7,遵循这些步骤,它解决了这个问题。我还移除并重建了Rmagick宝石,以便采取更好的措施。 – Andrew 2011-07-29 19:46:26

+0

这意味着作为默认答案。 – jackyalcine 2012-07-20 01:52:14

0

以上答案都不固定是我的案件。

经过进一步调查,我发现我打电话给.resample在一张0.02dpi的图片上(我从第三方API中提取图片,所以我不知道)。在分段错误出现后,这甚至会提示“磁盘几乎已满”警报消息。

0

我通过移动雾宝石下面的gemfile中的'gem'pg''行解决了同样的错误(经过多次试验),这与我认为的加载依赖关系有关。

2

如果您已经安装了BREW ImageMagick的,使用此:

brew upgrade -f imagemagick --disable-openmp 
1

在Linux中升级的ImageMagick后看到了同样的问题。这里还有一些笔记。我怀疑ImageMagick的库和链接红宝石宝石(这与以前所有的意见一致的一些不匹配看看这个类似的线程RubyForge上http://rubyforge.org/forum/forum.php?thread_id=48036&forum_id=33

我的解决办法倾倒RMagick赞成MojoMagick的 - 。一个很瘦的红宝石API没有链接到ImageMagick库,只是使用控制台二进制文件。

它在这里可用:www.misuse。组织/科学/ 2008/01/30/mojomagick-红宝石图像库换ImageMagick的/

我已经建立了一个宝石,并加入调整大小以填补作物功能,它可在github https://github.com/bunnymatic/mojo_magick

相关问题