rbenvでRubyのバージョン切り替えをしており、Ruby2.6→2.4に切り替えた後、Rails serverを起動したときに発生したエラー。過去にも一度遭遇した記憶がある。その時はbrew install opensslをして乗り切ったと思うけど、今回はそれで解決しなかった。
TL;DR
Let’s try
rbenv install 2.4.2 #(your using version)
My env
OS:macOS Catalina 10.15.5
パッケージ管理:Homebrew 2.5.0-2-g17d92a2
Rubyバージョン管理:rbenv 1.1.2
Rubyバージョン:ruby 2.4.2p198 (2017-09-14 revision 59899) [x86_64-darwin18]
状況:railsコマンド全般使えない
Error Message
$ rails server
/Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/2.4.0/openssl.rb:13:in `require': dlopen(/Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/2.4.0/x86_64-darwin18/openssl.bundle, 9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib (LoadError)
Referenced from: /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/2.4.0/x86_64-darwin18/openssl.bundle
Reason: image not found - /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/2.4.0/x86_64-darwin18/openssl.bundle
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/2.4.0/openssl.rb:13:in `<top (required)>'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/activesupport-5.1.6/lib/active_support/key_generator.rb:2:in `require'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/activesupport-5.1.6/lib/active_support/key_generator.rb:2:in `<top (required)>'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails/application.rb:4:in `require'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails/application.rb:4:in `<top (required)>'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails.rb:12:in `require'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails.rb:12:in `<top (required)>'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails/commands/server/server_command.rb:4:in `require'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails/commands/server/server_command.rb:4:in `<top (required)>'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails/command/behavior.rb:82:in `require'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails/command/behavior.rb:82:in `block (2 levels) in lookup'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails/command/behavior.rb:78:in `each'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails/command/behavior.rb:78:in `block in lookup'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails/command/behavior.rb:77:in `each'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails/command/behavior.rb:77:in `lookup'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails/command.rb:68:in `find_by_namespace'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails/command.rb:42:in `invoke'
from /Users/okamotomasahiro/.rbenv/versions/2.4.2/lib/ruby/gems/2.4.0/gems/railties-5.1.6/lib/rails/commands.rb:16:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
I tried
homebrewを使ってopensslをインストールしてみる。前もこれで直った記憶がある。
$ brew install openssl
🍺 /usr/local/Cellar/[email protected]/1.1.1g: 8,059 files, 18MB
check
$ brew list -1 | grep openssl
[email protected]
[email protected]
is deprecated…
homebrewのフォーラムを発見しました。
使っているRubyとOpenSSL1.1が互換性がない、OpenSSL1.0はdeprecateしててbrew installできなくて困っているという内容です。私と同じ状況です。
この中でrvmのissueが紹介されています。
解決法として
brew install rbenv/tap/[email protected]
rvm install 2.3.8 -C --with-openssl-dir=`brew --prefix [email protected]`
が示されています。ですが、私はrbenvを使っているのでこの策は該当しません。
とりあえず
brew install rbenv/tap/[email protected]
を実行すると正常に[email protected]が手に入りました。確認してみます。
$ brew list -1 | grep openssl
[email protected]
[email protected]
手に入りました。
rvm installは実行しても意味がないので
rbenv install 2.4.2
を実行します。この時、uninstallしたりする必要はありません。既にrbenvで管理しているRubyをインストールし直しただけという形になります。
rbenv: /Users/okamotomasahiro/.rbenv/versions/2.4.2 already exists
continue with installation? (y/N) y
Downloading openssl-1.1.0j.tar.gz...
-> https://dqw8nmjcqpjn7.cloudfront.net/31bec6c203ce1a8e93d5994f4ed304c63ccf07676118b6634edded12ad1b3246
Installing openssl-1.1.0j...
Installed openssl-1.1.0j to /Users/okamotomasahiro/.rbenv/versions/2.4.2
Downloading ruby-2.4.2.tar.bz2...
-> https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.2.tar.bz2
Installing ruby-2.4.2...
WARNING: ruby-2.4.2 is past its end of life and is now unsupported.
It no longer receives bug fixes or critical security updates.
ruby-build: using readline from homebrew
Installed ruby-2.4.2 to /Users/okamotomasahiro/.rbenv/versions/2.4.2
オッ。rbenv2.4.2にopenssl-1.1.0jがインストールされたようです。
ちなみにRuby2.4は2020年3月31日を持ってサポートを終了しています。
https://www.ruby-lang.org/ja/news/2020/04/05/support-of-ruby-2-4-has-ended/
この状態からRailsアプリケーションを動かすためにrailsサーバーを起動すると無事に作動しました。
おまけ
無事に作動する前にbundle install
を実行しました。
その後、rails serverを実行すると
psql: error: could not connect to server: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
これもよく見るエラー(Postgres特有のエラーです)。brew info postgresql
で状況を確認します。
postgresql: stable 12.4 (bottled), HEAD
Object-relational database system
https://www.postgresql.org/
/usr/local/Cellar/postgresql/12.4 (3,223 files, 37.8MB) *
Poured from bottle on 2020-09-08 at 21:52:46
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/postgresql.rb
License: PostgreSQL
==> Dependencies
Build: pkg-config ✔
Required: icu4c ✔, krb5 ✔, [email protected] ✔, readline ✔
==> Options
--HEAD
Install HEAD version
==> Caveats
To migrate existing data from a previous major version of PostgreSQL run:
brew postgresql-upgrade-database
This formula has created a default database cluster with:
initdb --locale=C -E UTF-8 /usr/local/var/postgres
For more details, read:
https://www.postgresql.org/docs/12/app-initdb.html
To have launchd start postgresql now and restart at login:
brew services start postgresql
Or, if you don't want/need a background service you can just run:
pg_ctl -D /usr/local/var/postgres start
==> Analytics
install: 257,705 (30 days), 625,283 (90 days), 1,545,309 (365 days)
install-on-request: 250,840 (30 days), 609,026 (90 days), 1,474,422 (365 days)
build-error: 0 (30 days)
brew upgradeしたため、Postgresが12.4にバージョンアップされています。今まで11.4を使ってました。指示に従い、brew postgresql-upgrade-database します。
これが成功し、rails serverを起動してみます。するとアプリケーションが作動しました。