概要
Macにてbrew upgrage
コマンドを実行時に、
postgresqlバージョンアップ(14.3 ➡︎ 14.5)が自動で実施された。
その後、rails s
コマンドにてエラーが発生。
その解消方法について、備忘録として残す。
環境
もろもろ | バージョン |
---|---|
Mac | 12.5.1 (Monterey) |
Ruby | 3.0.1 |
Rails | 6.1.6.1 |
Homebrew | 3.5.10 |
PostgreSQL | 14.3 ➡︎ 14.5 (アップデート) |
発生したエラー
rails s
コマンド実行
↓
/Users/username/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require': dlopen(/Users/username/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/pg-1.4.3/lib/pg_ext.bundle, 0x0009): Library not loaded: '/opt/homebrew/opt/postgresql/lib/libpq.5.dylib' (LoadError)
Referenced from: '/Users/username/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/pg-1.4.3/lib/pg_ext.bundle'
Reason: tried: '/opt/homebrew/opt/postgresql/lib/libpq.5.dylib' (no such file), '/usr/local/lib/libpq.5.dylib' (no such file), '/usr/lib/libpq.5.dylib' (no such file), '/opt/homebrew/Cellar/postgresql@14/14.5_1/lib/libpq.5.dylib' (no such file), '/usr/local/lib/libpq.5.dylib' (no such file), '/usr/lib/libpq.5.dylib' (no such file) - /Users/username/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/pg-1.4.3/lib/pg_ext.bundle
エラー解消方法(結論)
下記コマンドにてシンボリックリンクを作成。
ln -s /opt/homebrew/opt/postgresql/lib/postgresql@14/libpq.5.dylib /opt/homebrew/opt/postgresql/lib/libpq.5.dylib
↓
作成後にrails s
コマンドで無事実行できた。
エラー原因の特定までの流れ
rails sエラー時の注目箇所
'/opt/homebrew/opt/postgresql/lib/libpq.5.dylib' (LoadError)
と
'/opt/homebrew/opt/postgresql/lib/libpq.5.dylib' (no such file)
あたり
私「どうやらlibpq.5.dylib
というファイルが見当たらないことで読み込めないっぽいなぁ」
↓
下記コマンドでファイルがあるかを確認しにいく。
ls -la /opt/homebrew/opt/postgresql/lib/
↓
libpq.5.dylib
というファイルは見当たらないが、
postgresql@14
というディレクトリを発見。
↓
postgresql@14
のディレクトリ内を見ると、libpq.5.dylib
のファイル発見!
↓
どうやらディレクトリの階層構造が変化してしまったらしい。(赤字部分)
upgrade前:/opt/homebrew/opt/postgresql/lib/libpq.5.dylib
upgrade後:/opt/homebrew/opt/postgresql/lib/postgresql@14/libpq.5.dylib
↓
シンボリックリンクを(下記コマンドで)作成して対応しよう。
ln -s 「シンボリックリンク元のパス」 「シンボリックリンクを作成する場所のパス」
↓
最終的に実行したコマンド
ln -s /opt/homebrew/opt/postgresql/lib/postgresql@14/libpq.5.dylib /opt/homebrew/opt/postgresql/lib/libpq.5.dylib
補足
上記解決に至る前に試したこと
ターミナルにて
brew services restart postgresql@14
(PostgreSQLの再起動)
brew uninstall --force postgresql@14
(PostgreSQLのアンインストール)
brew install postgresql@14
(PostgreSQLの再インストール)
railsのGemfile&ターミナルにて
gem 'pg'
の行をコメントアウトしてbundle update
gem 'pg'
の行をアンコメント(コメントアウト解除)してbundle install
上記では改善に至らず。。。
「no such file」というエラー文言を受けて、素直にディレクトリやファイルの場所を確認しにいくべきだったと反省。。。
参考にさせていただいた記事
追記(2022/10/07)
上記シンボリックリンクでの対処について、
PostgreSQLのアップデートが再度実行されると、
シンボリックリンクが消えてしまい、
同一のエラーが出てしまいます。
シンボリックリンクの貼り直しでも対処できますが、
根本解決のために下記手順を実行したので、
記録として残します。
手順
- rbenvアンイントール
- .rbenvディレクトリの削除
- rbenvインストール
- rubyインストール
- rubyバージョン固定
- rails(Gem)インストール
- (railsアプリフォルダにて)Gem入れ直し
- 解決!(rails s成功!)
実際のコマンド
brew uninstall rbenv # rbenvアンインストール
rm -rf /Users/username/.rbenv # .rbenvディレクトリ削除
brew install rbenv # rbenvインストール
rbenv install 3.0.1 # rubyインストール(※必要なバージョンを指定)
rbenv global 3.0.1 # rubyバージョン固定
gem install rails -v 6.1.6 # railsインストール(※必要なバージョンを指定)
bundle install # (railsアプリフォルダにて)Gem入れ直し
rails s # 無事起動成功、やったー!
※.rbenvディレクトリの削除により、
各種Gemが削除されるので、
必要に応じて、入れ直しが必要です。
ご注意ください。