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

部署到Heroku后Ruby on Rails用户注册错误排查求助

问题本质

部署到Heroku后注册用户出现500错误,核心原因是Devise生成账户确认邮件时,生产环境未配置网站主机地址。本地开发用letter_opener时仅需相对路径即可打开链接,但生产环境发送邮件给用户必须生成完整的URL,缺少主机地址会导致模板渲染失败。

解决步骤

1. 配置生产环境的default_url_options

编辑config/environments/production.rb,添加Action Mailer的主机配置:

Rails.application.configure do
  # 保留原有配置,新增以下内容
  config.action_mailer.default_url_options = { host: '你的Heroku应用域名' }
  # 示例:若应用域名为my-rails-app.herokuapp.com,写为:
  # config.action_mailer.default_url_options = { host: 'my-rails-app.herokuapp.com' }
end

更灵活的环境变量方式(推荐)

如果担心域名变更,可通过环境变量配置:

# config/environments/production.rb
config.action_mailer.default_url_options = { host: ENV['APP_HOST'] }

然后在Heroku控制台设置环境变量:

heroku config:set APP_HOST=your-app-name.herokuapp.com

2. 区分开发与生产环境的邮件投递方式

确保letter_opener仅在开发环境启用,生产环境使用实际邮件服务:

  • 开发环境(config/environments/development.rb):
config.action_mailer.delivery_method = :letter_opener
  • 生产环境(config/environments/production.rb):配置实际邮件服务(如SendGrid、Mailgun),示例:
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
  address: 'smtp.sendgrid.net',
  port: 587,
  user_name: ENV['SENDGRID_USERNAME'],
  password: ENV['SENDGRID_PASSWORD'],
  authentication: :plain,
  enable_starttls_auto: true
}

3. 重新部署到Heroku

提交配置修改后重新部署:

git add .
git commit -m "Fix Devise host configuration for production emails"
git push heroku main

验证

部署完成后,尝试注册新用户,此时Devise能生成完整的确认链接,不会再触发500错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:18:28