Rails5.2でLibrary not loadedのエラーが出てrailsコマンドが打てなくなった人必見

Railsのアプリが突然動かなくなってしまい、以下のようなエラーが出て解決するのに数時間かかったので備忘録として残しておきます。
本当に焦った汗
たまにこういうことが起きるとお尻がムズムズして何回もトイレに行ってしまうのは僕だけでしょうか・・・

 dlopen(/Users/〇〇〇〇〇〇/.rbenv/versions/2.5.1/lib/ruby/2.5.0/x86_64-darwin18/digest/md5.bundle, 9): Library not loaded: /usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib (LoadError)
  Referenced from: /Users/〇〇〇〇〇〇〇〇/.rbenv/versions/2.5.1/lib/ruby/2.5.0/x86_64-darwin18/digest/md5.bundle
  Reason: image not found - /Users/〇〇〇〇〇〇〇〇/.rbenv/versions/2.5.1/lib/ruby/2.5.0/x86_64-darwin18/digest/md5.bundle
スポンサーリンク

目的

opensslのLibrary not loadedエラーに苦しむ人を救う!

(前提、環境)

mac
macOS Mojave 10.14.5
ruby 2.5.1
rails 5.2.3

はじめに

railsコマンドが動かなくなった時の仮説と検証の履歴を残します。

 dlopen(/Users/tech-camp/.rbenv/versions/2.5.1/lib/ruby/2.5.0/x86_64-darwin18/digest/md5.bundle, 9): Library not loaded: /usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib (LoadError)
  Referenced from: /Users/〇〇〇〇〇〇〇〇/.rbenv/versions/2.5.1/lib/ruby/2.5.0/x86_64-darwin18/digest/md5.bundle
  Reason: image not found - /Users/〇〇〇〇〇〇〇〇/.rbenv/versions/2.5.1/lib/ruby/2.5.0/x86_64-darwin18/digest/md5.bundle

公式(っぽい)の回答

githubにkensohさんが解決策をあげてくれたので、こちらを参考にしました!

dyld: Library not loaded error on macOS (OpenSSL missing)
https://github.com/kelaberetiv/TagUI/issues/86

仮説検証① /usr/local/opt/openssl@1.1/lib/libssl.1.1.dylibが存在しない。

最初はシンプルにファイルが読み込めていないのかと思い、

# ターミナル
ls /usr/local/opt/openssl/lib

で検索し、libssl.1.1.dylibがなかったのが原因かと考えていました。
mdfindコマンドでファイルを検索した結果、cellarのなかにファイルがあったので、sudo ln -s コマンドを使ってシンボリックリンクを作成してみることに。

# ターミナル
mdfind libssl.1.1.dylib
=>/usr/local/Cellar/openssl@1.1/1.1.1f/lib/libssl.1.1.dylib

sudo ln -s /usr/local/Cellar/openssl@1.1/1.1.1f/lib/libssl.1.1.dylib /usr/local/opt/openssl/lib

その後、ls -lコマンドで確認するとroot権限でした使えないということだったので、chownコマンドで所有権限を書き換えます。
※シンボリックリンクの権限変更には-h オプションが必要です。

# ターミナル
cd /usr/local/opt/openssl/lib
sudo chown -h <ユーザー名> libssl.1.1.dylib

これでうまくいくかと思いきや・・・
結果は変わらず泣

MacにてRailsでMysqlを使おうとすると『 9): Library not loaded: libmysqlclient.18.dylib (LoadError) 』が発生する場合の対策
https://qiita.com/w7tree/items/656b5d3e6a6f0a0b475e

OpenSSL Library not loadedが出たら疑う場所
https://blog.mothule.com/tools/rbenv/tools-rbenv-ssl-load-error

仮説検証② brew update && brew upgrade

ここで本格的に検索しなければいけないかと思い、githubなどを必死に検索していきます。
上記の公式っぽい文献を見つけ、その内容を試していくことにしました。

dyld: Library not loaded error on macOS (OpenSSL missing)
https://github.com/kelaberetiv/TagUI/issues/86

brew update && brew upgradeコマンドをうち、Homebrewを最新の状態にします。

# ターミナル
brew update && brew upgrade

Homebrewを入れ直したら、bash_profileまたはzshrcにパスの設定も必要になるかもしれません。
ログにも載っているのですが、
必要なpathがあれば記入していきます。

# ターミナル
echo 'export PATH="/usr/local/opt/openssl@1.1/bin:$PATH"' >> ~/.bash_profile

 vi ~/.bash_profile
 =>
export LDFLAGS="-L/usr/local/opt/openssl/lib"
export CPPFLAGS="-I/usr/local/opt/openssl/include"
export PKG_CONFIG_PATH="/usr/local/opt/openssl/lib/pkgconfig"

※日本語の記事で下記も見つけたのですが、念の為置いておきます。

「 LoadError: dlopen(〜): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib」と表示された場合の解決法
https://qiita.com/kota-es/items/98ae6ee84fc59aaae2ea

仮説検証③ opensslの再インストール

上記の記事の続きです。
なぜbrew uninstallを繰り返すのは分かりません笑
※ログを見ている限り1回で十分です。

brew uninstall openssl; brew uninstall openssl; brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

仮説検証④ rubyのバージョンの再インストール

Homebrewをupdateしてしまい、rubyの中に入っているopensslのバージョンが変わってしまった可能性もあったので、一旦rbenvのrubyを再インストールしました。

#ターミナル
rbenv uninstall 2.5.1
rbenv install 2.5.1
rbenv global 2.5.1
rbenv rehash

ターミナルでRails関連のコマンドが一切使えなくなってしまいました。
https://teratail.com/questions/225461

仮説検証⑤ railsアプリのbundler入れ直し

rubyを入れ直したのでbundlerから入れ直しです。
pwdコマンドでアプリのディレクトリにいるか確認し、そこから入れ直していきます。

#ターミナル
gem install bundler
# ここでエラーが出る人はGemfile.lockを削除してください。
# rm Gemfile.lock

bundle update

結果

うまく起動!
なかなか大変な作業で数時間取られてしまいました。。。
opensslの関係性が崩れると他のライブラリにも影響してしまうのでヒヤヒヤでしたが、一旦動いてよかったなぁと思います。

結論

brew updateで最新のものにした後にrubyを再インストールしなおす。

が最善手かと思われます!
何か他に手があればぜひ教えてください!

タイトルとURLをコピーしました