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

使用Devise_invitable发送邀请时遇Missing host错误求助

解决Devise Invitable发送邀请时的Missing Host错误

错误原因

邮件模板中使用root_url、accept_invitation_url这类生成完整URL的方法时,Rails无法确定应用的主机地址(域名/IP+端口),导致无法生成可访问的完整链接,从而抛出该错误。

解决方案

1. 全局配置各环境的主机地址

在对应环境的配置文件中设置default_url_options,让Rails知道生成URL时使用的主机:

  • 开发环境(config/environments/development.rb)
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
  • 测试环境(config/environments/test.rb)
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
  • 生产环境(config/environments/production.rb)
config.action_mailer.default_url_options = { host: '你的生产域名' } # 例如 'example.com'

配置完成后重启Rails服务器,让配置生效。

2. 确保Devise路由正确关联自定义控制器

你的路由中需要明确指定自定义的邀请控制器,否则Devise会使用默认控制器。修改config/routes.rb中的devise配置:

devise_for :users, controllers: {
  registrations: 'registrations',
  invitations: 'users/invitations'
}

3. 额外注意:邀请参数权限

你的自定义邀请控制器中,当前的set_params方法未被Devise使用,需要重写invite_params来允许创建用户和AlunoProfile所需的所有参数,避免参数被过滤:

class Users::InvitationsController < Devise::InvitationsController
  # ... 现有create方法 ...

  private

  def invite_params
    params.require(:user).permit(
      :email, :first_name, :last_name, :role,
      :morada, :birthdate, :nif, :numero_utente,
      :cartao_cidadao, :validity, :contacto,
      :encarregado_educação, :grau_parentesco,
      :contacto_emergencia, :aulas, :horario_preferencial,
      :recolha_dados, :fotografias_captadas
    )
  end
end

完成以上配置后,重新发送邀请即可正常生成邮件中的链接,解决该错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 16:30:31