【Rails】bundle installでGemのインストールはしているのにコンテナやEB環境で認識されない時の対処法

どうもこんにちは。

今回は、タイトルに記載した件について対処したので備忘録として記事にします。

# 環境

Ruby 3.2.2
Rails 7.1.3.3
EB環境 Ruby 3.2 running on 64bit Amazon Linux 2023/4.0.7

# どんなエラーが出ていた？

エラーログをそのまま貼り付けてしまいますが、`Could not find sassc-2.1.0 in locally installed gems (Bundler::GemNotFound)`という部分でどんなエラーかが確認できます。

```
bundler: failed to load command: rake (/var/app/staging/vendor/bundle/ruby/3.2.0/bin/rake)
/usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/definition.rb:524:in `materialize': Could not find sassc-2.1.0 in locally installed gems (Bundler::GemNotFound)
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/definition.rb:197:in `specs'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/definition.rb:254:in `specs_for'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/runtime.rb:18:in `setup'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler.rb:171:in `setup'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/setup.rb:23:in `block in <top (required)>'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/ui/shell.rb:159:in `with_level'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/ui/shell.rb:111:in `silence'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/setup.rb:23:in `<top (required)>'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/cli/exec.rb:56:in `require_relative'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/cli/exec.rb:56:in `kernel_load'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/cli/exec.rb:23:in `run'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/cli.rb:492:in `exec'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/cli.rb:34:in `dispatch'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/cli.rb:28:in `start'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/libexec/bundle:45:in `block in <top (required)>'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
        from /usr/share/ruby3.2-gems/gems/bundler-2.4.10/libexec/bundle:33:in `<top (required)>'
        from /bin/bundle:25:in `load'
        from /bin/bundle:25:in `<main>'
```

**`sassc`gemのバージョン2.1.0が見つからない**と言われていますね。
でも、`Gemfile.lock`には、ちゃんと入ってるんですよね。

```lock
sassc (2.1.0-x86_64-linux)
  ffi (~> 1.9)
sassc-rails (2.1.2)
  railties (>= 4.0.0)
  sassc (>= 2.0)
  sprockets (> 3.0)
  sprockets-rails
  tilt
```

# 解決するまでに試したこと

## EB環境の再構築

困った時は、EB環境の再構築をして、ごちゃごちゃ設定をリセットできるのですが、これでは解決しませんでした。

## sasscのバージョン変更

`sassc`をバージョン2.4.0にしたり、2.2.0にしたりしてみましたが、`LoadError`が出てしまうんですよね。

https://qiita.com/PDC-Kurashinak/items/29125c0ed2fedc4a9b42

# 解決策

自分がやった対応としては、以下のコマンドを実行していくことです。

```sh
$ eb ssh
$ sudo su
$ cd /var/app/current
$ gem clean
$ gem install bundler
$ bundle install
```

一度、Gemを綺麗にしてから、`bundler`や他のGemを再度インストールします。

ただ、このままだと以下のようなエラーが出てくることがあります。

```
/var/app/current/vendor/bundle/ruby/3.2.0/gems/mysql2-0.5.6/lib/mysql2/client.rb:97:in `connect': Unknown MySQL server host 'db' (-2) (Mysql2::Error::ConnectionError)
```

DBに接続できない...
database.ymlの設定は間違っていないし...

これは、`gem clean`コマンドを実行した時に、ネイティブの`mysql2`gemが消えてしまったことが原因でした。

なので、`gem install mysql2`を実行します。

これで万事解決です！

以上