You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby on Rails升级后Heroku环境Devise登录报错

Ruby 3.x + Rails 7.x 升级后Heroku登录500错误(Devise Trackable模块参数问题)

核心原因

这个错误是因为Ruby 3.x的参数校验更严格,加上Rails 7修改了ActiveRecord#save的参数签名——旧版本Devise的Trackable模块里用了save(false)这种位置参数调用,而Rails 7里save只接受关键字参数(比如save(validate: false)),所以触发了ArgumentError(传入1个参数但预期0个)。

本地测试正常大概率是两种情况:要么本地的Devise版本已经是兼容的,要么你的本地测试没覆盖到Trackable触发save的登录流程。

解决步骤

1. 升级Devise到兼容Rails 7的版本

Devise 4.8.0及以上版本已经修复了这个问题,把旧的save(false)改成了save(validate: false)。

  • 修改Gemfile:
    gem 'devise', '~> 4.9.0' # 用最新稳定版也可以,只要兼容Rails 7
    
  • 本地更新依赖:
    bundle update devise
    
  • 提交Gemfile和Gemfile.lock到代码仓库,重新部署到Heroku

2. 检查自定义Trackable代码

如果项目中重写了Devise Trackable的方法(比如update_tracked_fields!),搜索代码里的save调用,做如下替换:

  • 将save(false)替换为save(validate: false)
  • 将save(true)替换为save(validate: true)(或直接调用save,默认就是验证状态)

3. 确认Heroku上的Devise版本

部署完成后,通过Heroku CLI确认版本是否符合要求:

heroku run bundle show devise --app 你的staging应用名

版本必须≥4.8.0

验证

重新触发登录流程,查看Heroku日志是否仍有错误。通常升级Devise后即可解决该问题。

内容的提问来源于stack exchange,提问作者Victor Athoti.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 14:20:54