カッパでも分かるiOSアプリゲーム開発

カッパがひたすらゲーム制作に関することを書くブログです。Railsに関するTipsもたまにまとめてます。

Rails に ImageMagick が入らずに環境が完全に壊れた場合の対処法

スポンサードリンク

Ruby on Rails 5 超入門

f:id:InvokeTwoA:20151023183618p:plain「ふーっ。railsはbundle関係が失敗した時が大変だー」
f:id:InvokeTwoA:20151215172640p:plain「なんやかんやでかなりの時間を取られますもんね」

症状

  • gem 'rmagick' を入れようとする
  • bundle 関係の処理を実行すると下記のエラーが出てしまう
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/kappa/.rvm/gems/ruby-2.4.0-dev/gems/rmagick-2.16.0/ext/RMagick
/Users/kappa/.rvm/rubies/ruby-2.4.0-dev/bin/ruby -r ./siteconf20170125-847-17cgh0a.rb extconf.rb
checking for gcc... yes
checking for Magick-config... no
checking for pkg-config... yes
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
checking for outdated ImageMagick version (<= 6.4.9)... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
	--with-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/Users/kappa/.rvm/rubies/ruby-2.4.0-dev/bin/$(RUBY_BASE_NAME)

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /Users/kappa/.rvm/gems/ruby-2.4.0-dev/extensions/x86_64-darwin-15/2.4.0/rmagick-2.16.0/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/kappa/.rvm/gems/ruby-2.4.0-dev/gems/rmagick-2.16.0 for inspection.
Results logged to /Users/kappa/.rvm/gems/ruby-2.4.0-dev/extensions/x86_64-darwin-15/2.4.0/rmagick-2.16.0/gem_make.out

An error occurred while installing rmagick (2.16.0), and Bundler cannot continue.
Make sure that `gem install rmagick -v '2.16.0'` succeeds before bundling.

[f:id:InvokeTwoA:20151023183618p:plain「要約すると下記の通り」

  • ImageMagickを入れようとしたけど MagickCore.pc がなくてインストール出来なかった
  • おそらく PKG_CONFIG_PATH のパスが通ってないから確認してみて
  • gem install rmagick -v '2.16.0' のコマンドが通ってから実行して

MagickCore.pc を PKG_CONFIG_PATH に通す

f:id:InvokeTwoA:20151023183618p:plain「まず PKG_CONFIG_PATH が設定されてるか確認」

env | grep PKG_CONFIG_PATH

f:id:InvokeTwoA:20151023183618p:plain「何も設定されてなかったので下記コマンドでパスを設定」

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

f:id:InvokeTwoA:20151215172640p:plain「残念ながら変化なし。これで解決した人も多かったのだけど」

brew で imagemagick , pkgconfig を入れ直してみる

brew install imagemagick
brew install pkgconfig
  • 既に pkgconfigが入ってると言われる場合は reinstall にする

f:id:InvokeTwoA:20151023183618p:plain「!! エラー内容が変わった!!」
f:id:InvokeTwoA:20151215172640p:plain「進んだというべきか、より迷い込んだというべきか……」

新たなエラー内容

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    current directory: /Users/kappa/.rvm/gems/ruby-2.4.0-dev/gems/rmagick-2.16.0/ext/RMagick
/Users/kappa/.rvm/rubies/ruby-2.4.0-dev/bin/ruby -r ./siteconf20170125-3412-17x29ks.rb extconf.rb
checking for gcc... yes
checking for Magick-config... no
checking for pkg-config... yes
checking for outdated ImageMagick version (<= 6.4.9)... no
checking for presence of MagickWand API (ImageMagick version >= 6.9.0)... no
checking for Ruby version >= 1.8.5... yes
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no

Can't install RMagick 2.16.0. Can't find MagickWand.h.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

Provided configuration options:
	--with-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/Users/kappa/.rvm/rubies/ruby-2.4.0-dev/bin/$(RUBY_BASE_NAME)

To see why this extension failed to compile, please check the mkmf.log which can be found here:

  /Users/kappa/.rvm/gems/ruby-2.4.0-dev/extensions/x86_64-darwin-15/2.4.0/rmagick-2.16.0/mkmf.log

extconf failed, exit code 1

Gem files will remain installed in /Users/kappa/.rvm/gems/ruby-2.4.0-dev/gems/rmagick-2.16.0 for inspection.
Results logged to /Users/kappa/.rvm/gems/ruby-2.4.0-dev/extensions/x86_64-darwin-15/2.4.0/rmagick-2.16.0/gem_make.out

An error occurred while installing rmagick (2.16.0), and Bundler cannot continue.
Make sure that `gem install rmagick -v '2.16.0'` succeeds before bundling.

f:id:InvokeTwoA:20151023183618p:plain「要約すると下記のような感じか」

  • 何らかの理由で Makefile を作れなかった
  • 必要なライブラリかヘッダーが欠けていると思われる
  • 何でコンパイルに失敗したかは下記のログファイルを見てみろ
/Users/kappa/.rvm/gems/ruby-2.4.0-dev/extensions/x86_64-darwin-15/2.4.0/rmagick-2.16.0/mkmf.log

f:id:InvokeTwoA:20151215172640p:plain「なんか明確な理由が分からないエラー。どハマリの予感」
f:id:InvokeTwoA:20151023183618p:plain「とりあえずログファイルを見てみよう!」

ログファイルを見てみた

  • ログはとんでもなく長い
  • 必要ありそうな部分は一番下の下記部分
have_header: checking for wand/MagickWand.h... -------------------- no

"gcc -E -I/Users/kappa/.rvm/rubies/ruby-2.4.0-dev/include/ruby-2.4.0/x86_64-darwin15 -I/Users/kappa/.rvm/rubies/ruby-2.4.0-dev/include/ruby-2.4.0/ruby/backward -I/Users/kappa/.rvm/rubies/ruby-2.4.0-dev/include/ruby-2.4.0 -I.  -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16 -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16 -I/usr/local/Cellar/imagemagick/7.0.4-5/include/ImageMagick-7  -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16 -DMAGICKCORE_HDRI_ENABLE=1 -DMAGICKCORE_QUANTUM_DEPTH=16 -I/usr/local/Cellar/imagemagick/7.0.4-5/include/ImageMagick-7  conftest.c -o conftest.i"
conftest.c:3:10: fatal error: 'wand/MagickWand.h' file not found
#include <wand/MagickWand.h>
         ^
1 error generated.
checked program was:
/* begin */
1: #include "ruby.h"
2:
3: #include <wand/MagickWand.h>
/* end */

--------------------


Can't install RMagick 2.16.0. Can't find MagickWand.h.
||< 
- どうやら include wand/MagickWand.h の部分で失敗しているらしい
- マジックワンドを探せ!!

** 迷走開始  pkgconfig,  imagemagick の再インストール

- やはり pkg_config あたりのパスがおかしいんじゃないかという回答が多く出ている
- 念のため再度 pkg_config を入れ直してみる
>||
brew uninstall --ignore-dependencies  pkgconfig imagemagick
brew install imagemagick pkgconfig
  • まったく進歩なし。パスの違いならこれで設定され直されるはずなのだが……

MagickWand の場所を探してみた

$ mdfind MagickWand.h                                                                                                                                                                                                   
/usr/local/Cellar/imagemagick/7.0.4-5/share/doc/ImageMagick-7/www/api/MagickWand/struct__MagickWand.html
/usr/local/Cellar/imagemagick/7.0.4-5/include/ImageMagick-7/MagickWand/MagickWand.h
/Users/kappa/vendor/ruby/2.3.0/extensions/x86_64-darwin-15/2.3.0-static/rmagick-2.15.4/gem_make.out
/Users/kappa/vendor/ruby/2.3.0/extensions/x86_64-darwin-15/2.3.0-static/rmagick-2.15.4/mkmf.log
/Users/kappa/vendor/ruby/2.3.0/gems/rmagick-2.15.4/ext/RMagick/extconf.rb
/Users/kappa/vendor/ruby/2.0.0/gems/rmagick-2.15.4/ext/RMagick/mkmf.log
/Users/kappa/vendor/ruby/2.0.0/gems/rmagick-2.15.4/ext/RMagick/extconf.rb
  • なんか今まで迷走してたせいか、たくさんのファイルが見つかった
  • ここにパスを指定しながら gem install すれば良いという回答を見つけたので試してみる
C_INCLUDE_PATH=/usr/local/Cellar/imagemagick/7.0.4-5/include/ImageMagick-7/ gem install rmagick
  • 全然ダメだった 一応他のパスも試したけど余裕でダメ
  • 合わせ技で解決したという回答も見かけたので試してみたけどダメ
C_INCLUDE_PATH=/usr/local/Cellar/imagemagick/7.0.4-5/include/ImageMagick-7/ PKG_CONFIG_PATH=/usr/local/Cellar/imagemagick/6.8.6-3/lib/pkgconfig/  gem install rmagick

ちなみに Davianならば下記で治るという報告多数

 apt-get install libmagickcore-dev libmagickwand-dev

Ubuntu ならば下記コマンドで治るという報告多数

sudo apt-get install libmagickwand-dev 

そして解決

  • imagemagick7 と imagemagick6 のファイルパス混同が原因じゃないか?という説
  • 下記のコマンドで imagemagick6 で入れてみる
brew tap homebrew/versions
brew install imagemagick@6
PKG_CONFIG_PATH=/usr/local/opt/imagemagick@6/lib/pkgconfig gem install rmagick
  • そして bundle install すると……

f:id:InvokeTwoA:20151023183618p:plain「成功だーーーー!」
f:id:InvokeTwoA:20151215172640p:plain「 image magick 本当に恐ろしいモンスターでした 」