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

Heroku部署的Rails应用Devise忘记密码未显示用户不存在错误

问题分析

从日志可以看到,生产环境触发了500内部服务器错误,根源是TurboDeviseController::Responder里调用了未定义的rendering_options方法/变量,导致Devise无法正常处理“用户不存在”的场景,直接抛出系统错误,而非显示模型级别的错误提示。

解决方案

1. 修复Turbo Devise控制器的错误

打开app/controllers/turbo_devise_controller.rb,找到to_turbo_stream方法的rescue块,修正未定义的rendering_options:

替换为正确的渲染逻辑:

class TurboDeviseController < DeviseController
  class Responder < Devise::Responder
    def to_turbo_stream
      controller.render(options.merge(formats: :html))
    rescue ActionView::MissingTemplate => e
      # 直接构造渲染参数,避免使用未定义的变量
      controller.render(
        template: "devise/#{controller.action_name}",
        formats: :html,
        status: :unprocessable_entity
      )
    end
  end

  self.responder = Responder
  respond_to :html, :turbo_stream
end

2. 确保Devise错误提示正常显示

你的忘记密码视图已经包含了Devise错误信息渲染:

<%= render "devise/shared/error_messages", resource: resource %>

修复500错误后,Devise的passwords#create动作会在找不到用户时,自动给resource添加“用户不存在”的错误信息,视图会正常渲染该提示。

3. 部署验证

将修复后的代码部署到Heroku:

git add app/controllers/turbo_devise_controller.rb
git commit -m "Fix undefined rendering_options in TurboDeviseResponder"
git push heroku main

测试输入不存在的邮箱,此时应该显示“用户不存在”的提示,而非系统错误页面。

内容的提问来源于stack exchange,提问作者aiem2

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:44:57