brew upgrade後にrailsでlibpq.5.dylib (LoadError)と出たときの対処方法
railsでbin/dev
したら突然以下のようなエラーが出て動かなくなった。
おそらく、この前brew upgradeが何かの拍子に走って、パッケージが更新されたせいだろう。
11:19:44 web.1 | /Users/zoh/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/bootsnap-1.13.0/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:32:in `require': dlopen(/Users/zoh/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/pg-1.4.4/lib/pg_ext.bundle, 0x0009): Library not loaded: /opt/homebrew/opt/postgresql/lib/libpq.5.dylib (LoadError)
11:19:44 web.1 | Referenced from: /Users/zoh/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/pg-1.4.4/lib/pg_ext.bundle
11:19:44 web.1 | 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.6/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/zoh/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/pg-1.4.4/lib/pg_ext.bundle
こちらの記事では、シンボリックリンクの作成や、railsの再インストールで対応されてた。
ただ、特定のgemの対処のみでよければ以下の方法でもよさそう。
今回はpgというgemが現状のローカル環境と一致していないビルドになっていることが原因かなと思うのでgemを一度消して、入れ直せばOK
bundle exec gem uninstall pq
でgemを一旦消して、再びbundle install
を実行します。
自分の場合、バージョンが二つインストールされていたみたいなので、両方削除。 (3を選んだ。)
$ bundle exec gem uninstall pg
Select gem to uninstall:
1. pg-1.4.3
2. pg-1.4.4
3. All versions
> 3
Successfully uninstalled pg-1.4.3
Successfully uninstalled pg-1.4.4
$ bundle install # これで消したgemが再構築される。
bin/dev
で無事再起動できました。
この記事の環境情報
- Ruby 3.1.2
- rails 7.0.4
- postgres (PostgreSQL) 14.6 (Homebrew)
- 眠気30%
PostgreSQLに関する他の記事を読む
railsに関する他の記事を読む
- omniauth-google-oauth2でscopeを追加するときはemailが必須だった
- google-api-clientを指定してinstallするのはもう非推奨になっていた
- OmniAuthでdeveloper providerを使ってダミーログインをする
- [Rails]取得したクラス名をキャメルケースからスネークケースに変換する
- urlヘルパーをモデルなどでも使う方法
最近の記事を読む
- Flutterでcontextを使わずにlocale情報を取得する
- Cloud RunでIAPを有効にしようとしてハマったこと
- slimでtype='application/ld+json'のscriptタグを書く
- タグマネージャーでjsのloadイベントを発火させたいとき
- mysqlコマンドを実行してERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)と言われたら