动态预设开发和生产环境的URL

时间:2012-06-30 21:56:10

标签: ruby-on-rails heroku

我正在使用rails和我正在发送的邮件password_reset.text.erb文件中为我的网站创建密码重置功能

http://localhost:3000/password_resets/<%=@user.password_reset_token%>/edit/

在我的开发环境中。如果令牌与保存的模型匹配,这将触发我的控制器重置密码并重定向用户编辑密码。

但是,我想动态配置它,所以当我部署到heroku时,它会知道将其更改为mywebsite.com/password_resets/...

我该怎么做?

编辑:

def password_reset(user)
    @user = user
    mail(to: user.email, subject: "Bitelist Password Reset")
end

1 个答案:

答案 0 :(得分:1)

通常,我会在适当的config/environment文件中配置邮件程序的主机信息。

config.action_mailer.default_url_options = { :host => "example.com" }

您可以查看此页面的“生成网址”部分:http://rails.rubyonrails.org/classes/ActionMailer/Base.html

使用该配置集,典型的路由结构似乎运行得非常好。我不是100%肯定您的情况下可用的路线,因此您可能仍需要手动构建完整的URL以包含重置令牌组件。

要生成实际的URL,如果您的路由设置为具有带有用户令牌的命名路由,则可以使用命名路由。即。

<%= edit_password_resets_url(@user.password_reset_token) %>

如果您没有将令牌集成到现有路由中,则可能需要手动构建URL:

<%= "#{url_for(:controller => 'password_resets', :action => 'whatever_action_this_is')}/#{@user.password_reset_token}/edit/" %>

甚至使用default_url_options[:host]完全手动构建它,然后添加上面的其余部分。

如果需要,你也可以在请求时设置主机,虽然这可能是过度的(并且不会是线程安全的)。

def set_mailer_host
  ActionMailer::Base.default_url_options[:host] = request.host_with_port
end