2011-04-21 3 views
53

image_tag no está utilizando el asset_host que he configurado. ¿Alguna idea de por qué? Lo único que puedo pensar es que tiene que ver con que sea un Mailer.image_tag en el anuncio publicitario que no usa asset_host

config/medio ambiente/development.rb

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

myMailer.rb

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

prestados 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 image_tag para crear una URL ruta completa, ya que estará apareciendo en un correo electrónico.

+0

intenta asignar el host de activos de la siguiente manera y ver si funciona ActionController :: Base.asset_host = "http: // localhost: 3000" –

+0

De acuerdo con mi investigación que se utilizó para Rails2, no para Rails3. – RyanJM

+0

http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html aquí lo usaron para establecer el host de recursos y la versión de los rieles es 3.07 –

Respuesta

90

Estaba equivocado antes. Esta es la solución que necesita (hasta 3,1 carriles, donde las configuraciones asset_host se unifican):

config.action_mailer.asset_host = "http://localhost:3000" 
+4

No parece que haya sido unificado. En Rails 3.2.8 todavía tengo que configurar esto por separado para la configuración 'action_controller'. –

+0

Esto no funcionará para las vistas de correo electrónico. –

+17

Hay un atajo para esto en al menos Rails 3.2: 'config.asset_host = 'localhost: 3000''. Establece tanto 'config.action_controller.asset_host' como' config.action_mailer.asset_host'. –

0

El código erróneo de por qué no se puede hacer es 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 infractor en GH: https://github.com/rails/rails/blob/master/actionpack/lib/action_view/helpers/asset_paths.rb

Desde una plantilla ActionMailer Ver carece de un controlador, que Don Obtenga el comando para reescribir basado en un asset_host. Esto probablemente debería ser un boleto abierto para el equipo central de Rails.

Puede intentar lo siguiente config y ver si ayuda:

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

Estoy bastante seguro de que sólo va a trabajar para url_for sin embargo.

+0

Sí, parece que solo funciona para url_for. Desearía que hubiera una forma de hacer image_tag url_for ("logo.png") ... – RyanJM

+0

Veré si puedo juntar algo de tiempo para escribir un parche para él. –

+0

El enlace está roto –

22

tenemos que especificar tanto config.action_controller.asset_host y config.action_mailer.asset_host, on Rails 3.1 y 3.2.

Para añadir el nombre de host a la image_tag en ambos puntos de vista de correo electrónico y no por correo electrónico, añada 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 debe establecerse tanto en action_controller como en action_mailer, incluso en Rails 3.2.x.

+0

por qué necesitamos 'config.action_controller.asset_host' para especificar, ¿es diferente de' config.action_mailer.asset_host '? – Aamir

+0

Una es establecer el administrador de activos para la vista de acción, el otro para el anuncio de acción. Debe especificar ambos para que funcionen las páginas web y las plantillas de correo electrónico. –

Cuestiones relacionadas