升级pg gem到1.0.0后Rails应用报错,回滚仍有问题求解决
解决pg gem升级/回滚后的兼容问题
我之前碰到过几乎一模一样的pg gem版本折腾问题,给你几个亲测有效的排查和解决方向:
彻底重置gem依赖,确保版本锁定
有时候残留的gem版本会干扰bundle的加载,建议先彻底清理再重新安装:- 卸载所有已安装的pg版本:
gem uninstall pg --all,按提示确认卸载所有版本 - 在Gemfile里明确指定你之前用的稳定版本(比如我之前回滚到
0.21.0,你可以换成你之前没问题的版本):gem 'pg', '~> 0.21.0' - 可以删除
Gemfile.lock文件(若担心其他依赖受影响,也直接运行bundle update pg),然后执行bundle install - 运行
bundle show pg确认bundle加载的是你指定的版本
- 卸载所有已安装的pg版本:
用
bundle exec强制使用项目依赖的gem
你遇到的rake命令报错,很大概率是因为直接运行rake db:migrate时用了全局的gem版本,而不是Gemfile里锁定的版本。试试给所有rails/rake命令加上bundle exec前缀:- 迁移命令:
bundle exec rake db:migrate - 启动服务器:
bundle exec rails s
这样能确保命令使用的是项目Gemfile里配置的依赖版本,避免全局gem的干扰。
- 迁移命令:
检查系统PostgreSQL版本与gem的兼容性
pg gem 1.0.0开始对系统的PostgreSQL版本有了更高要求(需要9.5及以上),如果你的系统装的是更旧的PostgreSQL,升级到1.0.0就会报错。回滚旧gem版本时也要注意:旧版pg gem(比如0.x系列)对系统pg版本的兼容性更广,但也要确保两者匹配。
你可以运行psql --version查看系统的PostgreSQL版本,然后对应选择兼容的gem版本:- 系统pg >=9.5:可以用pg 1.0.0+
- 系统pg <9.5:建议用pg 0.21.x及以下版本
确认Rails版本与pg gem的兼容性
不同Rails版本对pg gem的支持范围也不一样,比如:- Rails 4.2.x:官方推荐使用pg < 1.0.0
- Rails 5.x及以上:可以兼容pg 1.0.0+
你可以对照自己的Rails版本,调整Gemfile里的pg版本限制,避免版本不兼容导致的报错。
如果还是有问题,可以把具体的报错信息贴出来,比如Gemfile错误的具体内容,这样能更精准地定位问题~
内容的提问来源于stack exchange,提问作者Christopher Warrington
相关产品推荐
相关产品推荐

