ruby on rails - generate - ¿Cómo configuro el nombre de host para Rails ActionMailer?
rails generate email (7)
Curiosamente, tuve el mismo problema que tú, pero en pruebas de unidad (mientras seguías los comentarios de Michael Hartl). Tenía esta línea en mi archivo test.rb, pero eso no ayudó:
config.action_mailer.default_url_options = { host: ''example.com'', protocol: ''http'' }
También he agregado otra línea como esta a test.rb, y sorprendentemente esto resolvió el problema.
default_url_options = { host: ''example.com'', protocol: ''http'' }
Estoy trabajando en un correo electrónico de contraseña olvidada bastante tradicional. Quiero enviar al usuario un token de cambio de contraseña incrustado en un enlace en el que pueden hacer clic para cambiar su contraseña. Estoy enviando un correo electrónico a través del tradicional ActionMailer.
Si utilizo una etiqueta link_to normal
<%= link_to "click here", :controller => foo, :action => ''bar'', :token => token %>
Recibo un enlace relativo - bastante inútil de un correo electrónico.
Si agrego
:only_path => false
, entonces se :only_path => false
un error diciendo que necesito configurar default_url_options[:host]
. Los documentos de ActionController implican que haces eso al reemplazar los métodos #default_url_options en tu controlador. ¿Seguramente hay una opción de configuración para decirle a Rails cuál es su nombre de host sin agregar mi propio archivo de configuración, analizarlo, etc.?
Hay otra alternativa, como se describe en http://pivotallabs.com/how-i-leaned-to-stop-hating-and-love-action-mailer/
Esta solución tiene la ventaja de que no requiere ninguna configuración (por lo que es menos problemática) y funciona bien siempre y cuando envíe correos electrónicos desde los controladores.
Pero si planea enviar un correo electrónico sin pasar por un controlador (por ejemplo, desde la línea de comandos o en respuesta a otro correo electrónico), necesita la configuración estática.
La configuración de default_url_options
directamente está en desuso en Rails 3.1. Utilice url_for en url_for lugar.
Agregar parámetro :protocol
para anular el valor predeterminado (http),: :protocol => ''https://''
. Esto creará una url a partir de "https: // ..." en lugar de la predeterminada "http: //"
La configuración de default_url_options directamente está en desuso en Rails 3.1
Usa el url_for helper para crearlo:
<%= link_to "click here", url_for(:controller => foo, :action => ''bar'', :token => token, :host => ''www.yourdomain.com'') %>
Probablemente también quieras configurar: protocol => ''https'', por cierto.
config.action_mailer.default_url_options = {
:host => "portal.example.com",
:protocol => ''https''
}
Puedes hacer
<%="click here", :controller => foo, :action => ''bar'', :token => token, :host=>request.host -%>
default_url_options
está disponible desde config.action_mailer
y debe configurarse en el archivo de configuración de su entorno.
Por ejemplo, en config/environments/production.rb
:
config.action_mailer.default_url_options = {
:host => ''www.yourdomain.com''
}
Para las pruebas locales, modifique config/environments/development.rb
:
config.action_mailer.default_url_options = {
:host => ''127.0.0.1'',
:port => 3000
}
Luego, asumiendo que tiene una ruta con nombre llamada forgot_password_login
, puede generar la URL del enlace de inicio de sesión en su anuncio de correo usando algo como esto:
forgot_password_login_url(:token => ''a7s8q15sk2...'')