ruby-on-rails ruby-on-rails-3 asset-pipeline actionmailer

ruby on rails - ¿Cómo obtengo la URL completa de una imagen en un anuncio publicitario asíncrono de Rails?



ruby-on-rails ruby-on-rails-3 (3)

Bueno, este es un comportamiento extraño, pero he resuelto este problema. Resulta que a menos que action_mailer.asset_host comience con http:// , se ignorará. Hay un Regex en actionpack/lib/action_view/helpers/asset_url_helper.rb que define un URI de ActionMailer válido:

URI_REGEXP = %r{^[-a-z]+://|^(?:cid|data):|^//}

Sin embargo, si coloca un http:// delante del action_controller.asset_host , terminará con enlaces a http://http://myfullappurl.dev

Así que para resolverlo tuve que agregar lo siguiente a mi development.rb

config.action_controller.asset_host = ''myfullappurl.dev'' config.action_mailer.asset_host = ''http://myfullappurl.dev''

Para que quede claro, esto es Rails 4.0.0beta1 con los correos electrónicos que se envían de forma asíncrona con Sidekiq, no estoy seguro si esto afecta a Rails 3.

Quiero que los correos electrónicos que envío con ActionMailer contengan imágenes que se vinculen a mi aplicación. En mi entorno de desarrollo, por ejemplo:

<img src="http://myfullappurl.dev/assets/myimage.png">

Tengo esto en mi desarrollo. Rb

config.action_controller.asset_host = ''myfullappurl.dev'' config.action_mailer.asset_host = config.action_controller.asset_host config.action_mailer.default_url_options = { host: ''myfullappurl.dev'', only_path: false }

Pero no puedo obtener mis plantillas de correo para representar una URL completa de ninguna de las siguientes maneras:

asset_path(''myimage.png'') asset_path(''myimage.png'', only_path: false) image_url(''myimage.png'')

Se responden muchas preguntas similares sobre este tema haciendo algo como esto:

"#{request.protocol}#{request.host_with_port}#{asset_path(''image.png'')}"

Pero debido a que mis correos electrónicos se envían de forma asíncrona con Sidekiq, no hay un objeto de request como el que habría si se enviaran de forma sincronizada en un controlador.

¿Hay algo obvio que me esté perdiendo, o tengo que luchar contra Rails para hacer esto? Estoy usando Rails 4, pero estoy seguro de que cualquier cosa que funcione en 3.1 / 3.2 debería funcionar bien.


Creo que necesitas configurar esto en tu configuración

config.action_controller.asset_host = ''http://localhost:3000'' #Or your domain config.action_mailer.asset_host = config.action_controller.asset_host


en su archivo de entorno (es decir, desarrollo.rb): -

config.action_mailer.asset_host = ''http://localhost:3000'' #Or your domain

en su archivo de visualización de correo: -

<%= image_tag(''image_name.jpg'') %>

o

<img src="<%= image_url(''image.jpg'') %>" %>