etiqueta de imagen en mailer que no utiliza el host de activos


Image_tag no está usando el asset_host que he establecido. ¿Alguna idea de por qué? Lo único que se me ocurre es que tiene que ver con que sea un correo.

Config / environment / development.rb

config.action_controller.asset_host = "http://localhost:3000"

MyMailer.rb

<%= image_tag "logo.png", :style=>"margin-left:10px; padding-bottom:15px;" %>

Traducido como:

<img alt="Logo" src="/images/logo.png?1303090162" style="margin-left:10px; padding-bottom:15px;" />

En la consola:

> MyApp::Application.config.action_controller
#<OrderedHash {… :asset_host=>"http://localhost:3000", …}>

Necesito el image_tag para crear una url de ruta completa porque aparecerá en un correo electrónico.

Author: Patrick Robertson, 2011-04-21

3 answers

Me equivoqué antes. Esta es la solución que necesita (hasta rails 3.1 donde las configuraciones asset_host se unifican):

config.action_mailer.asset_host = "http://localhost:3000"
 92
Author: Patrick Robertson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-04-22 20:49:11

Necesitamos especificar ambos config.action_controller.asset_host y config.action_mailer.asset_host, on Rails 3.1 y 3.2.

Para agregar el nombre de host al image_tag en las vistas de correo electrónico y no de correo electrónico, agregue lo siguiente a su archivo de entorno:

config.action_controller.asset_host = 'http://localhost:3000'
config.action_mailer.asset_host = config.action_controller.asset_host

Donde "http://localhost:3000' debe ser reemplazado por su URL de host (y el puerto si corresponde).

Esto necesita ser establecido tanto en action_controller como en action_mailer, incluso en Rails 3.2.x.

 22
Author: Tiago Franco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-09-26 18:31:20

El código ofensivo de por qué no puedes hacerlo está aquí:

# actionpack/lib/action_view/helpers/asset_paths.rb, line 27
def compute_public_path(source, dir, ext = nil, include_host = true)
  # More code up here....

    if controller && include_host
      has_request = controller.respond_to?(:request)
      source = rewrite_host_and_protocol(source, has_request)
    end
end

Aquí está el archivo ofensivo en GH: https://github.com/rails/rails/blob/master/actionpack/lib/action_view/helpers/asset_paths.rb

Dado que una plantilla de vista de ActionMailer carece de un Controlador, no obtiene el comando para reescribir basado en un asset_host. Esto probablemente debería ser un boleto abierto al equipo central de Rails.

Puede probar la siguiente configuración y ver si ayuda:

config.action_mailer.default_url_options = {:host=>"localhost", :port=>3000, :protocol=>"http://"}

Estoy sin embargo, estoy bastante seguro de que solo funcionará para url_for.

 0
Author: Patrick Robertson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-11-20 11:32:45