image_tag in mailer not using asset_host

社会主义新天地 提交于 2019-11-28 18:32:00

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"

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.

Patrick Robertson

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!