Reputation: 7068
image_tag isn't using the asset_host I've set. Any ideas why? The only thing I can think of is it having to do with it being a Mailer.
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;" %>
rendered as:
<img alt="Logo" src="/images/logo.png?1303090162" style="margin-left:10px; padding-bottom:15px;" />
In console:
> MyApp::Application.config.action_controller
#<OrderedHash {… :asset_host=>"http://localhost:3000", …}>
I need the image_tag to create a full path url because it will be showing up in an email.
Upvotes: 55
Views: 28186
Reputation: 38772
Rails 7.1.
This is what worked for me:
<%= image_tag(image_url("logo.png", host: "https://example.com")) %>
Upvotes: 1
Reputation: 2306
The offending code as to why you can't do it is here:
# 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
Here is the offending file on GH: https://github.com/rails/rails/blob/master/actionpack/lib/action_view/helpers/asset_paths.rb
Since an ActionMailer View template lacks a Controller, you don't get the command to rewrite based on an asset_host. This should probably be a ticket opened to the Rails core team.
You can try the following config and see if it helps:
config.action_mailer.default_url_options = {:host=>"localhost", :port=>3000, :protocol=>"http://"}
I'm pretty sure it's only going to work for url_for
though.
Upvotes: 0
Reputation: 1016
We need to specify both config.action_controller.asset_host and config.action_mailer.asset_host, on Rails 3.1 and 3.2.
To add the hostname to the image_tag on both e-mail and non-email views, add the following to your environment file:
config.action_controller.asset_host = 'http://localhost:3000'
config.action_mailer.asset_host = config.action_controller.asset_host
Where 'http://localhost:3000' should be replaced by your host URL (and port if applicable).
This needs to be set on both action_controller and action_mailer, even in Rails 3.2.x.
Upvotes: 22
Reputation: 2306
I was wrong before. This is the solution you need (until rails 3.1 where the asset_host configurations become unified):
config.action_mailer.asset_host = "http://localhost:3000"
Upvotes: 96