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

##実行環境
・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

##１回目のエラーの状況

```
$ 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
```

##２回目のエラー内容（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`に戻している。
アンインストールしても、バージョン７っぽいファイルが残っていたので、それは手動で削除した（あまりしない方がいいような……。）。

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

```:.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`最新版をインストールしてからエラー表示が少し変わったので「エラーをこじらせてしまった。」と思ったが、結果的に上手く行ってよかった。
またエラーが出てこの記事を更新しないことを祈ります。