ruby-on-rails - for - send mailer rails
Cómo configurar ActionMailer default_url_options''s: host de forma dinámica al nombre de host de la solicitud? (3)
Estoy tratando de establecer las opciones de url predeterminadas de host: host para acción.
Tengo el siguiente conjunto en todos los archivos de entorno
config.action_mailer.default_url_options = {
:host => "localhost"
}
Quiero que sea más dinámico al proporcionar el host de solicitud.
cuando intento establecerlo
config.action_mailer.default_url_options = {
:host => request.domain
}
O
config.action_mailer.default_url_options = {
:host => request.env["SERVER_NAME"]
}
Lanza error ... no reconoce el objeto "solicitud"
¿hay alguna manera de configurar esto para el host de solicitud, no por hardcoding ...?
ACTUALIZACIÓN: use la respuesta seleccionada, ya que esto no es seguro para subprocesos.
Puede crear un filtro predeterminado como este:
# application_controller.rb
before_filter :mailer_set_url_options
...
def mailer_set_url_options
ActionMailer::Base.default_url_options[:host] = request.host_with_port
end
También es posible configurar un host predeterminado que se utilizará en todos los publicitarios configurando la opción: host en el hash default_url_options
en un application_controller.rb
agrega:
class ApplicationController < ActionController::Base
def default_url_options
{ host: request.host_with_port }
end
end
Fuente: https://edgeguides.rubyonrails.org/action_controller_overview.html#default-url-options
Alternativamente, puede pasar la request
cuando llame a la función de correo desde el controlador
class UserMailer < ActionMailer::Base
def welcome_email(user, request)
@user = user
@url = user_url(@user, host: request.host_with_port ) # do this for each link
mail(:to => user.email, :subject => "Welcome to My Awesome Site")
end
end
Fuente: https://guides.rubyonrails.org/action_mailer_basics.html#generating-urls-with-named-routes
el problema es que estos son inicializadores, se ejecutan cuando los raíles se acumulan y no cuando se llama a un mailer activo.
pero no tiene que usar la opción default_url, puede simplemente pasar el nombre de host a url_for / named routes en cada una de las vistas de su correo. El valor predeterminado simplemente evita tener que hacer eso.
vea la sección http://api.rubyonrails.org/classes/ActionMailer/Base.html sobre la generación de URL.