Heroku部署Ruby脚本报错求助:本地运行正常,需配置pg gem
解决Heroku部署Ruby应用时的PostgreSQL依赖问题
嘿,我之前也碰到过一模一样的情况!Heroku默认使用PostgreSQL作为数据库服务,而你本地大概率用的是SQLite或者其他数据库,所以本地执行bundle install、数据库创建和迁移都正常,但部署到Heroku就会因为缺失PostgreSQL的驱动包报错。下面是具体的解决步骤:
1. 更新Gemfile,添加pg gem
打开你的Gemfile,推荐把pg放在生产环境组里(这样本地开发如果用其他数据库不会受影响):
group :production do gem 'pg', '>= 1.2.0' # 这里的版本号要匹配你ActiveRecord的最低要求,比如Rails 6.1+至少要1.2.0 end
如果你本地也想改用PostgreSQL做测试,直接全局添加就行:
gem 'pg', '>= 1.2.0' # 根据你的ActiveRecord版本调整最低版本
2. 确认ActiveRecord对应的最低pg版本
不同版本的ActiveRecord对pg的版本要求不一样,你可以对照下面的参考值调整:
- Rails 7.x系列:pg >= 1.4.0
- Rails 6.1.x系列:pg >= 1.2.0
- Rails 6.0.x系列:pg >= 1.1.0
- Rails 5.2.x系列:pg >= 0.18.0
要是拿不准,也可以直接运行bundle show activerecord查看你的ActiveRecord版本,再去对应版本的文档里确认要求。
3. 重新安装依赖并提交代码
在本地终端执行这些命令:
bundle install git add Gemfile Gemfile.lock git commit -m "Add pg gem for Heroku PostgreSQL compatibility"
4. 重新部署到Heroku并执行迁移
推送更新后的代码到Heroku:
git push heroku main
然后别忘了运行Heroku上的数据库迁移:
heroku run rake db:migrate
小技巧如果还是报错
要是部署后还是有问题,去检查一下Gemfile.lock里的pg版本是不是真的符合要求。有时候bundle install可能会安装较低的版本,这时候可以直接指定明确的版本号来强制安装,比如适配Rails 7的话可以写:
gem 'pg', '~> 1.4.0'
内容的提问来源于stack exchange,提问作者Bsde
相关产品推荐
相关产品推荐

