LoginSignup
2
1

More than 3 years have passed since last update.

rmagick関係でハマったときの対処法(Ubuntu18.04,rails)

Last updated at Posted at 2020-05-18

実行環境

・Ubuntu18.04 (Windows10home on VirtualBox)
・rails 6
・ruby 2.7.1
・rmagick 4.1.2
・imagemagick 6.9.11-13 Q16 x86_64
・carrierwave 2.1.0

1回目のエラーの状況

$ bundle install

checking for brew... yes
checking for Ruby version >= 2.3.0... yes
checking for pkg-config... no


ERROR: Can't install RMagick 4.1.2. Can't find pkg-config in

対処

これで成功。
pkg-configとは何かはこちらで。
私はよくわかっていません。
https://pragma666.hatenablog.com/entry/20110623/1317812413

$ sudo apt install pkg-config
$ bundle install

最初のエラー前にしていたこと

brew link --forceはシンボリックリンクを作成して上書きしていることを意味する。
imagemagick@6は自動的にシンボリックリンクが作成されないので、シンボリックリンクを作成している。

【Homebrew】インストールしたパッケージのシンボリックリンクが作成されない場合
https://www.task-notes.com/entry/20141130/1417275206

$ brew install imagemagick@6

If you need to have imagemagick@6 first in your PATH run:
  echo 'export PATH="/home/linuxbrew/.linuxbrew/opt/imagemagick@6/bin:$PATH"' >> ~/.bash_profile

For compilers to find imagemagick@6 you may need to set:
  export LDFLAGS="-L/home/linuxbrew/.linuxbrew/opt/imagemagick@6/lib"
  export CPPFLAGS="-I/home/linuxbrew/.linuxbrew/opt/imagemagick@6/include"


$ brew link --force imagemagick@6

2回目のエラー内容(2020.5.19追記)

$ rails g model user(controlleとconsoleも以下のエラーが出た)
/home/username/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/bootsnap-1.4.6/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:23:in `require': libMagickCore-7.Q16HDRI.so.7: cannot open shared object file: No such file or directory - /home/username/.rbenv/versions/2.7.1/lib/ruby/gems/2.7.0/gems/rmagick-4.1.2/lib/RMagick2.so (LoadError)

最後のRMagick2.soは存在する。
libMagickcore-7.Q16HDRI.so.7imagemagickの最新版をインストール後にrailsコマンドを実行したらこの表記になった。
最初はimagemagick@6をインストールしていたので、エラー表示もlibMagickcore-6〇〇だった。
最新版だったらエラーが解消されるかもしれないと思って試してみたがだめだった。
エラーがなくなったときは、最新版はアンインストール済みで、imagemagick@6に戻している。
アンインストールしても、バージョン7っぽいファイルが残っていたので、それは手動で削除した(あまりしない方がいいような……。)。

.bash_profileにPATHを書き込んだが意味がなかった(エラーが治ったあとにコメントアウトしてもエラーにならなかった。)。
その他にimagemagickのアンインストール、インストールや、rmagickのインストール、アンインストールもだめ。
gemをmini_magickに変えたら上手く行ったが、今回はrmagickができるか試したかったので、様々なネット記事のやり方でやってみたが上手く行かなかった。
kernel_require.rb:23の内容を見たりして、「$LOADED_FEATURESというものの中にPATHを入れたらいいのかな?」と考えたが、大抵ググり方を変えたら答えがダイレクトに書いてあることが多いので、もう少し粘ってみることに(既に5時間(日数にして1日)以上粘っているけど。)。

.bash_profile
export PATH=/home/linuxbrew/.linuxbrew/opt/imagemagick@6/bin:$PATH
export LDFLAGS="-L/home/linuxbrew/.linuxbrew/opt/imagemagick@6/lib"
export CPPFLAGS="-I/home/linuxbrew/.linuxbrew/opt/imagemagick@6/include"
export PKG_CONFIG_PATH="/home/linuxbrew/.linuxbrew/opt/imagemagick@6/lib/pkgconfig"
export LD_LIBRARY_PATH="/home/linuxbrew/.linuxbrew/Cellar/imagemagick@6/6.9.11-13/lib"

対処法

$ gem pristine rmagick

これで通常通りrailsコマンドで作成できるようになった。
最初の方でこのコマンドとちょっと違うコマンドを打ったらエラーになったことと、gemをいじっていないからしても意味がないと思ってやっていなかった。

 pristineコマンドは、インストールされたgemをそのキャッシュされた.gemファイルの内容と比較し、キャッシュされた.gemのコピーと一致しないファイルを復元します。
 インストール済みのgemに変更を加えた場合、pristineコマンドはそれらを元に戻します。すべての拡張機能が再構築され、gemのすべてのビンスタブは、変更の確認後に再生成されます。
 キャッシュされたgemが見つからない場合はダウンロードされます。
引用元:Rubygemsのガイド(https://guides.rubygems.org/command-reference/#gem-pristine)

驚いたのが、エラーは出ていたが実はuserモデル自体は作成されていたこと。
userモデルが作成されていないものと思っていたので、確認しようともしなかった。

$ gem pristine rmagick
Restoring gems to pristine condition...
Building native extensions. This could take a while...
Restored rmagick-4.1.2

$ rails g model user
(要約 既に同じものが作成されていますよ。)
Running via Spring preloader in process 6644
      invoke  active_record
The name 'User' is either already used in your application or reserved by Ruby on Rails. Please choose an alternative or use --force to skip this check and run this generator again.

(手作業でモデルとマイグレーションファイルを削除した。)

$ rails g model user
Running via Spring preloader in process 6830
      invoke  active_record
      create    db/migrate/20200519105406_create_users.rb
      create    app/models/user.rb
      invoke    test_unit
   identical      test/models/user_test.rb
   identical      test/fixtures/users.yml

途中でimagemagick最新版をインストールしてからエラー表示が少し変わったので「エラーをこじらせてしまった。」と思ったが、結果的に上手く行ってよかった。
またエラーが出てこの記事を更新しないことを祈ります。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1