Rails项目安装pg gem时持续报错,请求技术解决方案
嘿,这个pg gem安装的坑我踩过好多次!你遇到的这个报错:
ERROR: Error installing pg: ERROR: Failed to build gem native extension. Can't find the 'libpq-fe.h header * extconf.rb failed * An error occurred while installing pg (0.21.0), and Bundler cannot continue. Make sure that gem install pg -v '0.21.0' succeeds before bundling.
本质是你的系统缺少PostgreSQL的开发依赖库——pg gem在编译原生扩展时必须用到这些底层文件。下面分不同操作系统给你精准的解决步骤:
macOS 用户
如果你用Homebrew管理包,直接在终端执行:
brew install postgresql
安装完成后重新运行bundle install即可。如果还是报错,试试手动指定pg的配置路径:
gem install pg -v '0.21.0' -- --with-pg-config=/usr/local/bin/pg_config
Ubuntu/Debian 类 Linux 用户
安装PostgreSQL的开发包是关键,先更新包列表再安装:
sudo apt-get update && sudo apt-get install libpq-dev
依赖安装完成后,再执行bundle install或者单独安装指定版本的pg gem:
gem install pg -v '0.21.0'
Windows 用户
- 确保你安装Ruby时勾选了DevKit组件(这是编译原生gem的必要工具);
- 下载并安装和你的Ruby架构(32位/64位)匹配的PostgreSQL二进制包;
- 在命令行手动指定pg_config的路径来安装gem:
gem install pg -v '0.21.0' -- --with-pg-config=C:/Program Files/PostgreSQL/12/bin/pg_config
(注意把路径换成你实际安装PostgreSQL的版本路径,比如你装的是14版就改成14)
额外小技巧:规避本地安装pg的麻烦
其实部署Heroku时,Heroku的服务器环境已经自带了PostgreSQL的所有依赖,完全不需要你本地安装pg。你可以修改Gemfile,把pg限制在production环境,本地用sqlite3:
group :production do gem 'pg', '0.21.0' end group :development, :test do gem 'sqlite3' end
然后执行:
bundle install --without production
这样本地就不会安装pg gem,直接部署到Heroku时,它会自动安装production组的依赖,完美避开本地的编译问题!
内容的提问来源于stack exchange,提问作者Tab Codes

