bundle install报错:无法找到PostgreSQL客户端库(libpq)问题咨询
问题原因
这个报错是两个配置错误共同导致的:
- 错误使用
sudo执行bundle install:rbenv管理的Ruby安装在当前用户目录下,加sudo会切换到root用户环境,完全读不到你通过Homebrew在当前用户环境安装的PostgreSQL、libpq的路径,还会打乱gem目录的权限,引发后续的权限报错。 - Homebrew安装的旧版本PostgreSQL(9.5版本)属于keg-only包,不会自动将客户端库文件、
pg_config配置文件加入系统默认搜索路径,pg gem编译时找不到对应的libpq库就会抛出该错误。
解决步骤
- 第一步:先修复之前误用sudo搞乱的rbenv目录权限,执行以下命令把目录归属改回当前用户:
sudo chown -R $(whoami) ~/.rbenv
- 第二步:查询本机PostgreSQL 9.5的实际安装路径:
brew --prefix postgresql@9.5
Intel芯片Mac默认返回路径为/usr/local/opt/postgresql@9.5,M系列芯片Mac默认返回路径为/opt/homebrew/opt/postgresql@9.5。
- 第三步:把PostgreSQL 9.5的bin目录加入全局PATH,避免后续找不到命令。如果你用的是zsh(Mac默认shell),执行:
echo 'export PATH="/usr/local/opt/postgresql@9.5/bin:$PATH"' >> ~/.zshrc source ~/.zshrc
如果你用的是bash,把上面命令里的~/.zshrc换成~/.bash_profile即可。
- 第四步:手动指定pg_config路径安装pg gem(把命令里的路径换成你第二步查到的实际路径,版本号换成你项目Gemfile里要求的pg gem版本):
gem install pg -v '这里替换成你项目要求的pg版本' -- --with-pg-config=/usr/local/opt/postgresql@9.5/bin/pg_config
如果你是单独安装的libpq,也可以把路径换成libpq对应的pg_config路径:--with-pg-config=$(brew --prefix libpq)/bin/pg_config
- 第五步:去掉sudo,直接在当前用户权限下执行依赖安装即可:
bundle install
注意事项
- 严禁在rbenv/rvm这类用户级Ruby版本管理工具的环境下,用sudo执行gem、bundle相关命令。如果出现权限报错,优先检查
~/.rbenv、项目目录下vendor/bundle目录的文件归属是否为当前用户,不要直接用sudo绕过权限问题,否则会持续出现环境变量不生效、路径找不到的问题。 - 如果执行完以上步骤还是提示找不到libpq,可以执行
brew link libpq --force把libpq的库文件链到Homebrew的公共路径,再重新执行pg gem安装命令即可。
内容的提问来源于stack exchange,提问作者junghyun oh
相关产品推荐
相关产品推荐

