升级brew后的Rails s错误(postgresql@14)

总结

在Mac上执行brew upgrade命令时,postgresql版本升级(从14.3到14.5)自动执行。然后,通过rails s命令出现错误。将其解决的方法作为备忘录留下。

环境

もろもろバージョンMac12.5.1
(Monterey)Ruby3.0.1Rails6.1.6.1Homebrew3.5.10PostgreSQL14.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’(文件不存在)
之类的

我决定使用下面的命令去确认一下文件是否存在:

ls -la /opt/homebrew/opt/postgresql/lib/


找不到名为libpq.5.dylib的文件,
但发现了一个名为postgresql@14的目录。

查看postgresql@14目录内部,找到了libpq.5.dylib文件!

似乎目录结构发生了变化(红字部分)。
升级前:/opt/homebrew/opt/postgresql/lib/libpq.5.dylib
升级后:/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

填滿

在实现上述解决方法之前尝试的步骤:
通过终端进行操作
重新启动PostgreSQL:brew services restart postgresql@14
强制卸载PostgreSQL:brew uninstall –force postgresql@14
重新安装PostgreSQL:brew install postgresql@14

在Rails的Gemfile文件和终端中,将`gem ‘pg’`的行注释掉,然后运行`bundle update`命令。
将`gem ‘pg’`的行取消注释(即解除注释),然后运行`bundle install`命令。

上述情况未能实现改善。。。

收到了「找不到该文件」的错误信息,我应该诚实地检查目录和文件的位置,这样就不会后悔了。。。

我在参考的文章中看到

 

新增(2022年10月07日)

当涉及到上述符号链接的处理时,如果重新执行了PostgreSQL的更新,那么符号链接将会消失,导致相同的错误再次出现。

可以通过重新创建符号链接来处理,但为了解决根本问题,我执行了以下步骤,将其记录下来。

步驟

    1. 卸载rbenv

 

    1. 删除.rbenv文件夹

 

    1. 安装rbenv

 

    1. 安装ruby

 

    1. 固定ruby版本

 

    1. 安装rails(Gem)

 

    1. (在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,因此根据需要您需要重新安装它们。请注意。

广告
将在 10 秒后关闭
bannerAds