Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何配置Rails ActionMailer的主机名?_Ruby On Rails_Actionmailer_Hostname_Actioncontroller - Fatal编程技术网

Ruby on rails 如何配置Rails ActionMailer的主机名?

Ruby on rails 如何配置Rails ActionMailer的主机名?,ruby-on-rails,actionmailer,hostname,actioncontroller,Ruby On Rails,Actionmailer,Hostname,Actioncontroller,我正在处理一封相当传统的忘记密码电子邮件-我想给用户发送一封嵌入链接中的密码更改令牌,用户可以点击该令牌来更改密码。我通过传统的ActionMailer发电子邮件 如果我使用普通链接来标记 <%= link_to "click here", :controller => foo, :action => 'bar', :token => token %> foo,:action=>bar,:token=>token%> 我从一封电子邮件中得到了一个相对链接,这是毫

我正在处理一封相当传统的忘记密码电子邮件-我想给用户发送一封嵌入链接中的密码更改令牌,用户可以点击该令牌来更改密码。我通过传统的ActionMailer发电子邮件

如果我使用普通链接来标记

<%= link_to "click here", :controller => foo, :action => 'bar', :token => token %>
foo,:action=>bar,:token=>token%>
我从一封电子邮件中得到了一个相对链接,这是毫无用处的

如果我加上

:仅\u path=>false
,然后它会错误地说我需要设置
默认\u url\u选项[:host]
。ActionController文档意味着您可以通过覆盖控制器中的#default_url_options方法来实现这一点。当然,有一个配置选项可以告诉Rails它的主机名是什么,而无需添加我自己的配置文件、对其进行解析等等?

你能这样做吗

<%="click here", :controller => foo, :action => 'bar', :token => token, :host=>request.host -%>
foo,:action=>bar',:token=>token,:host=>request.host-%>

默认url\u选项可从
配置.action\u mailer
获得,并应在环境的配置文件中设置

例如,在
config/environments/production.rb
中:

config.action_mailer.default_url_options = {
  :host => 'www.yourdomain.com'
}
config.action_mailer.default_url_options = {
  :host => '127.0.0.1',
  :port => 3000
}
对于本地测试,修改
config/environments/development.rb

config.action_mailer.default_url_options = {
  :host => 'www.yourdomain.com'
}
config.action_mailer.default_url_options = {
  :host => '127.0.0.1',
  :port => 3000
}
然后,假设您有一个名为“忘记密码登录”的命名路由,您可以使用如下方式在邮件程序中生成登录链接URL:

forgot_password_login_url(:token => 'a7s8q15sk2...')

还有另一种选择,如中所述

此解决方案的优点是不需要任何配置(因此麻烦较少),只要您从控制器内部发送电子邮件,就可以正常工作


但是,如果您计划不通过控制器发送电子邮件(例如,从命令行或响应另一封电子邮件),则需要静态配置。

您可能还需要设置:protocol=>'https',顺便说一句

config.action_mailer.default_url_options = { 
    :host => "portal.example.com", 
    :protocol => 'https' 
}

在Rails 3.1中,不赞成直接设置默认的url选项

使用帮助器的url_创建它:

<%= link_to "click here", url_for(:controller => foo, :action => 'bar', :token => token, :host => 'www.yourdomain.com') %>
foo,:action=>bar,:token=>token,:host=>www.yourdomain.com')%%>

在Rails 3.1中,直接设置默认url选项是不推荐的。改用


添加参数
:protocol
以覆盖默认值(http),
:protocol=>'https://'
。这将创建以“”开头的urlhttps://...有趣的是,我没有使用默认的“http://”

,而是在单元测试中遇到了与您相同的问题(在遵循Michael Hartl的railstutorial时)。我的test.rb文件中有这一行,但这没有帮助:

config.action_mailer.default_url_options = { host: 'example.com', protocol: 'http' }
我还在test.rb中添加了另一行类似的代码,这令人惊讶地解决了这个问题

default_url_options = { host: 'example.com', protocol: 'http' }

无法从邮件中直接获取请求。我可以将其作为参数之一传递给电子邮件生成,但我们只是决定将此特定电子邮件从应用程序服务器而不是web前端发送。我想这意味着我需要制作一个定制的配置文件,其中包含前端网站的URL。doh,错过了它的邮件部分+1的问题和答案,这太奇怪了。。。为什么action mailer上会有此设置?发送电子邮件时,没有HTTP请求获取这些值。这是一个很好的提示,不过我恐怕需要静态配置。出于某种原因,我不断遇到越来越多的需要在web hit.current链接之外进行的处理。感谢:protocol=>“https”指针。使用“portal.example.com”似乎无法正常工作,至少在使用Desive邮件时是如此。生成的url以“”开头,与子域无关)。默认的\u url\u选项哈希中没有“挂起”逗号。我想编辑它,但它是一个1个字符的编辑,这是不可能的,所以。我觉得我失去了我的头脑。这对我不起作用