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.
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"
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.
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
.
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