tl;dr
-
Can't install RMagick 2.16.0. Can't find MagickWand.h.
のエラーを解決した - 最新のimagemagick(7系)がRMagickに対応しておらず、古いバージョン(6系)を入れる必要がある
エラー内容
bundle install
した際の表示
$ bundle install
...
Can't install RMagick 2.16.0. Can't find MagickWand.h.
...
背景
RailsでCarrierWaveを導入する際、RMagickをインストールしておこうかと軽い気持ちで、Gemfileに
gem 'rmagick'
と記述してbundle install
したら、なかなか難しいエラーにぶち当たった。
環境
Macbook Pro Mid 2015
MacOS Sierra (10.12.5)
$ ruby -v
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-darwin16]
$ brew -v
Homebrew 1.2.3
Homebrew/homebrew-core (git revision 08186; last commit 2017-06-19)
原因
imagemagick導入の過程で
brew install imagemagick
を実行してインストールした最新のimagemagick(7系)がRMagickに対応しておらず、古いバージョン(6系)を入れる必要があるとのこと。
参考:rmagickのインストールにハマった
解決策
homebrewにはパッケージをバージョン指定してインストールするコマンドがないため、git checkout
を使って目的のバージョンのimagemagickをインストールした。
参考:homebrewで過去のバージョンインストールする方法
バージョン6のimagemagickをインストールする必要があるので、ログを辿り、コミット番号を調べようとするも、直近のログしか見れない
$ brew log imagemagick
Warning: homebrew/core is a shallow clone so only partial output will be shown.
To get a full clone run:
git -C "$(brew --repo homebrew/core)" fetch --unshallow
全てのログを見るために、勧められたコマンドを実行。
$ git -C "$(brew --repo homebrew/core)" fetch --unshallow
remote: Counting objects: 341611, done.
remote: Compressing objects: 100% (142673/142673), done.
remote: Total 341611 (delta 199905), reused 337827 (delta 196134), pack-reused 0
Receiving objects: 100% (341611/341611), 103.38 MiB | 3.16 MiB/s, done.
Resolving deltas: 100% (199905/199905), completed with 3733 local objects.
めっちゃ重かった。1,2分はかかった。
これで全てのログが見れるようになったため、ログを辿る。
$ brew log imagemagick
commit b197a0693db353abf2b9c8135fc9865bfd237187
Author: BrewTestBot <brew-test-bot@googlegroups.com>
Date: Mon Jun 12 08:48:39 2017 +0000
imagemagick: update 7.0.6-0 bottle.
...(省略)...
commit fe4f239797d6aa7af91d7047d0e5e882ba607246
Author: ilovezfs <ilovezfs@icloud.com>
Date: Wed Jan 11 09:57:04 2017 -0800
imagemagick 7.0.4-3
commit 6f014f2b7f1f9e618fd5c0ae9c93befea671f8be
Author: BrewTestBot <brew-test-bot@googlegroups.com>
Date: Sat Jan 7 19:32:15 2017 +0000
imagemagick: update 6.9.7-3 bottle.
あった。このコミットがバージョン6の最新版のようだ。
フォーミュラが格納されているディレクトリに移動し、リポジトリをチェックアウト
$ cd /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/
$ git checkout 6f014f2b7f1f9e618fd5c0ae9c93befea671f8be imagemagick.rb
すでに最新のimagemagickをインストールしてしまっていたので、一旦アンインストールして、キャッシュを消す。
$ brew uninstall imagemagick
Uninstalling /usr/local/Cellar/imagemagick/7.0.6-0... (1,522 files, 22.4MB)
$ brew cleanup -s
Warning: Skipping git: most recent version 2.13.1 not installed
...(省略)...
/Users/ユーザー名/Library/Caches/Homebrew/imagemagick-7.0.6-0.sierra.bottle.tar.gz... (8.1MB)
...(省略)...
==> This operation has freed approximately 24MB of disk space.
再インストール。
$ brew install imagemagick
Updating Homebrew...
==> Downloading https://homebrew.bintray.com/bottles/imagemagick-6.9.7-3.sierra.
######################################################################## 100.0%
==> Pouring imagemagick-6.9.7-3.sierra.bottle.tar.gz
==> Using the sandbox
🍺 /usr/local/Cellar/imagemagick/6.9.7-3: 1,465 files, 22.2MB
ちゃんとバージョン6がインストールされた。
再びbundle install
すると、エラーなく通った!
homebrewでインストールする際のバージョン管理について勉強できた、とポジティブに捉えておこう。