升级brew后的Rails s错误(postgresql@14)
总结
在Mac上执行brew upgrade命令时,postgresql版本升级(从14.3到14.5)自动执行。然后,通过rails s命令出现错误。将其解决的方法作为备忘录留下。
环境
(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’(文件不存在)
之类的
我决定使用下面的命令去确认一下文件是否存在:
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的更新,那么符号链接将会消失,导致相同的错误再次出现。
可以通过重新创建符号链接来处理,但为了解决根本问题,我执行了以下步骤,将其记录下来。
步驟
-
- 卸载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,因此根据需要您需要重新安装它们。请注意。