##実行環境
・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.7
はimagemagick
の最新版をインストール後に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日)以上粘っているけど。)。
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
最新版をインストールしてからエラー表示が少し変わったので「エラーをこじらせてしまった。」と思ったが、結果的に上手く行ってよかった。
またエラーが出てこの記事を更新しないことを祈ります。