みかづきブログ・カスタム

基本的にはちょちょいのほいです。

macOS Catalina(10.15.6)でRailsを起動しようとすると `const_missing': library not found for class Digest::SHA1 -- digest/sha1 (LoadError) となってしまう 😱

f:id:kimizuka:20200905123316p:plain

ruby 2.2.2、Rails 4.2.3で開発しているプロジェクトがあるのだが、久しぶりに立ち上げようとしたところ、

`const_missing': library not found for class Digest::SHA1 -- digest/sha1 (LoadError)

となってしまった。

「さわってないのに壊れた!」と思った。思い当たる節といえば、macOSやXCodeのアップデートぐらいだ。濡れ衣かもしれないが。
解決方法を検索したところ、rubyを一度アンインストールしてインストールし直すという方法しか見つからず、思い切って実行した。(rubyのバージョン管理はrbenvを使用)

ものすごく長い道のりだったので、ログを残しておく。

❶ rubyの再インストール

rbenv uninstall 2.2.2
rbenv install 2.2.2
rbenv local 2.2.2

これでOKだ。
インストールにたびたび失敗したが、時間をおいたら成功した。

❷ bundlerのインストール

rbenv exec gem install bundler -v 1.16.0

これでOKだ。

引数なしの、

rbenv exec gem install bundler

だと、

ERROR: Error installing bundler:
bundler requires Ruby version >= 2.3.0.

というエラーが出る。
しかし、このプロジェクトはrubyのバージョンを上げるわけにはいかない。

なので、

rbenv exec gem install bundler -v 1.16.0

とbundlerのバージョンを引数で渡し、2.2.2のままでインストールする。

❸ bundle install を実行

XCodeを起動しXcode Command Line Toolsをインストールする
brew install v8-315
bundle config --local build.libv8 --with-system-v8
bundle config --local build.therubyracer --with-v8-dir=$(brew --prefix v8-315)
./bin/bundle install

これでOKだ。

いきなり、

./bin/bundle install

を実行すると、

Could not find json-1.8.6 in any of the sources

というエラーが出たが、これはXcode Command Line Toolsをインストールしたら解決した

次に、

Could not find therubyracer-0.12.2 in any of the sources

というエラーが出たが、

brew install v8-315
bundle config --local build.libv8 --with-system-v8
bundle config --local build.therubyracer --with-v8-dir=$(brew --prefix v8-315)

とv8を調整したら解決した。

❹ opensslのバージョンを切り替える

brew switch openssl 1.0.2s

これでOKだ。(ただし人によってバージョンは違う可能性がある)

./bin/rails s

で、railsを起動しようとしたら、

Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (LoadError)

というエラーが出た。
openssl 1.0.0がないのかな?と思い、

brew switch openssl 1.0.2s

でバージョンを切り替えたらエラーが消えた。

❺ railsの起動

./bin/rails s -b 0.0.0.0

これでOKだ。
僕はIPでもアクセスしたいので -b 0.0.0.0も渡している。

解決までに1時間掛かった。
この記事が誰かの役に立つ可能性は少ないが、少なくとも自分がまた同じ状態になったら参考にしようと思う。