¿Cómo enviar URL en correos electrónicos específicos del entorno?
-
20-08-2019 - |
Pregunta
Usando el código generado por restful_authentication, generalmente obtenemos 'localhost' como la URL en los correos de registro y activación. Estoy intentando crear algo como esto en su lugar:
def signup_notification(user, host)
setup_email(user)
@subject += 'Please activate your new account'
@body[:url] = "http://#{host}/activate/#{user.activation_code}"
end
Sin embargo, dado que la llamada real para entregar el correo está en un Observador, no puedo hacer esto:
UserMailer.deliver_signup_notification(user, request.host_with_port)
Dado que el método de solicitud no está disponible en los modelos. ¿Cuál es la mejor manera de hacerlo?
Pensé en almacenar URL por dominio en un archivo YAML y luego cargarlo en el inicio, pero luego los puertos pueden cambiar, por lo que no funcionaría.
Alternativamente, pensé en crear una variable de clase estática en algún lugar que se establece al cargar la aplicación, pero no sé cómo hacerlo. ¿El método de solicitud está disponible para inicializadores?
Solución
pruebe el complemento current_request, descrito en http://codeshooter.wordpress.com/2009/08/
funcionó para mí
Otros consejos
Utilizando ActiveMailer, configuro esto en config/envrionments/production.rb
config.action_mailer.default_url_options = { :host => "my.host.com" }
En el modelo app/models/event_mailer.rb
def new_event(event)
recipients EventMailer::NO_REPLY
bcc event.emails('new_event')
from EventMailer::FROM_EMAIL
subject "#{EventMailer::SUBJECT_HEADER} Event Updated :: #{event.title}"
content_type "text/plain"
body :event => event
end
Y luego en la vista de correo app/views/event_mailer/new_event.rb
You can view the event by going to: <%= url_for(:controller => "events", :action => "show", :id => @event.id, :only_path => false) %>
Que se genera en el correo:
You can view the event by going to: http://my.host.com/events/11
También tengo el mismo problema y esto es lo que he hecho
-
en el modelo de usuario agrego: host a attr_accessible, luego agrego este método
def host=(value) write_attribute :host, value end
-
en el controlador de usuario, en los métodos que envía correos electrónicos como crear y activar pongo
@user.host = request.host_with_port
ya que todavía soy un novato en los rieles, así que realmente espero que alguien encuentre una solución de mejores prácticas para este problema.
El nombre de host al que accede su servidor se encuentra en el encabezado Host de la solicitud. No debería tener acceso a él en los modelos (suponiendo que los rieles estén sanos). Pero si puede acceder a los objetos de solicitud en los controladores, puede insertar ese valor en su campo de modelo cuando extraiga los objetos de modelo de db.