Cela fait presque une heure que je frappe ma tête contre le mur pour essayer de comprendre ce qui ne va pas ici, et je suis sûr (ou plutôt espère) que c'est quelque chose d'assez évident que je néglige. J'utilise Ruby 1.9.1, Sinatra 1.0 et RMagick 2.13.1. ImageMagick et RMagick sont correctement installés et fonctionnels. J'ai manipulé et enregistré des images avec succès depuis irb.
La partie pertinente du tableau params (le formatage change pour des raisons de lisibilité):
{"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"
}
}
Le code correspondant:
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
L'erreur (la ligne 229 est la ligne commençant par "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:0123 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
Quelqu'un a une idée de ce qui se passe? Merci!
Pour développer le commentaire de Matthew Savage, procédez comme suit:
brew install imagemagick --disable-openmp
et ça recommence à fonctionner. Pas besoin d'éditer les fichiers. (Je ne sais pas si c'est ce qu'il dit réellement ou s'il dit supprime le drapeau, mais la commande homebrew ci-dessus fonctionne pour moi sur OSX 10.6)
Si vous avez déjà installé imagemagick, alors
brew uninstall imagemagick && brew install imagemagick --disable-openmp
brew upgrade -f
ne réinstalle plus, vous devez donc d'abord le désinstaller.)
J'avais un problème très similaire sur OS X 10.6.7 sous Ruby 1.9.2p180.
Pour développer le commentaire de Ash Berlin, si vous utilisez le gestionnaire de paquets homebrew, vous devez désinstaller le paquet imagemagick et également supprimer le cache, avant que cela ne fonctionne.
Désinstallez imagemagick:
brew remove imagemagick
Supprimer le cache:
rm -rf `brew --cache imagemagick`
Puis réinstallez le paquet avec cet indicateur:
brew install -f imagemagick --disable-openmp
Pour ceux qui utilisent MacPorts, ImageMagick 6.6.5 et Ruby 1.9.2.
port uninstall ImageMagick
port edit ImageMagick
--disable-openmp
à configure.args
(près de la ligne 100)port install ImageMagick
Travaillé pour moi :)
j'ai eu un problème similaire en utilisant Rails 3 avec carrierwave sur OS X 10.6 et Ruby 1.9.2, également bloqué dans un appel à lire à chaque fois qu'une image devait être redimensionnée. Faire:
brew uninstall imagemagick
brew install imagemagick --disable-openmp
résolu le problème pour moi.
La panne peut être due à l'accès à ImageMagick sur un thread sous OSX MacPorts. Voir post .
Pas une réponse, juste mes expériences:
Je suis également tombé sur ce problème dans l'un de mes propres projets. J'ai ce problème sur os x (léopard des neiges) avec Ruby-1.9.2-p0 et Ruby-1.9.2-p136.
Ce qui m'a particulièrement dérouté, c'est que je peux lire une image à l'aide de rmagick via la console Rails. Mais lorsque je tape exactement la même ligne depuis mon application Rails, il explose de la même manière que celle décrite ci-dessus.
Reconstruire imagemagick via homebrew comme indiqué ci-dessus ne me suffisait pas. J'ai également dû supprimer le joyau de rmagick et le reconstruire via bundle.
Si vous avez déjà installé imagemagick avec brew, utilisez ceci:
brew upgrade -f imagemagick --disable-openmp
Vu le même problème après la mise à niveau d'ImageMagick sur une machine Linux. Il y a quelques notes supplémentaires ici. Je soupçonne un décalage entre les bibliothèques ImageMagick et les gemmes Ruby liées (ce qui est en accord avec tous les commentaires précédents. Découvrez ce fil de discussion similaire sur rubyforge. http://rubyforge.org/forum/forum.php?thread_id=48036&forum_id=4 33
Ma solution consistait à vider RMagick au profit de MojoMagick, une API Ruby très légère qui ne se lierait pas aux bibliothèques ImageMagick, mais utiliserait simplement les fichiers binaires de la console.
Il est disponible ici: www.misuse.org/science/2008/01/30/mojomagick-Ruby-image-library-for-imagemagick/
J'ai construit un bijou et ajouté redimensionner pour remplir avec la fonctionnalité de recadrage disponible sur github https://github.com/bunnymatic/mojo_magick
MISE À JOUR: Ce n’est pas vraiment une vraie réponse en soi (je vois toujours le même problème dans MRI 1.9.1), mais j’ai utilisé RVM pour mettre à jour mon installation IRM 1.8.7 et mes pierres précieuses et essayer de l’exécuter, et tout fonctionne parfaitement. Je suppose que le problème est que RMagick n'est pas encore tout à fait compatible avec la version 1.9.1, bien que la documentation mentionne spécifiquement le support de Ruby 1.9.
Aucune de ces réponses ne l'a corrigé dans mon cas.
Après des recherches plus poussées, j’ai trouvé que j’appelais .resample
sur une image de 0,02 dpi (je tire les images d’une API tierce, alors je n’en ai aucune idée). Cela entraînait même un message d’alerte «Disque presque plein» après l’apparition de l’erreur de segmentation.
J'ai résolu la même erreur (après de nombreux essais) en déplaçant la ligne 'gem "pg" dans le fichier gem au-dessous de la gemme de brouillard.
J'ai essayé la solution MacPorts de CaptainPete. Il a construit 6.6.6-0 et avait toujours le même problème. Passer à la fabrication pour faire la construction a fait l'affaire. Notez que brassée construit 6.6.4-5. Il est possible qu'il existe plusieurs bogues ou un nouveau bogue dans 6.6.6 qui provoque des problèmes similaires.