邮件中的image_tag不使用asset_host

image_tag没有使用我设置的asset_host。 任何想法为什么? 我能想到的唯一的事情就是它是一个梅勒。

configuration/环境/ development.rb

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

myMailer.rb

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

呈现为:

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

在控制台中:

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

我需要image_tag来创build一个完整的pathurl,因为它会显示在一个电子邮件。

我以前错了。 这是您需要的解决scheme(直到rails 3.1的asset_hostconfiguration统一):

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

我们需要在Rails 3.1和3.2上同时指定config.action_controller.asset_host和config.action_mailer.asset_host。

要将主机名添加到电子邮件视图和非电子邮件视图的image_tag,请将以下内容添加到您的环境文件中:

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

哪里“http:// localhost:3000”应该被你的主机URL(和端口,如果适用)所取代。

这需要在action_controller和action_mailer上设置,即使在Rails 3.2.x中也是如此。

有问题的代码,为什么你不能这样做是在这里:

 # 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 

这里是GH的违规文件: https : //github.com/rails/rails/blob/master/actionpack/lib/action_view/helpers/asset_paths.rb

由于ActionMailer视图模板缺less控制器,因此不会根据asset_host获取重写命令。 这应该可能是向Rails核心团队开放的一张票。

你可以尝试下面的configuration,看看是否有帮助:

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

我很确定它只能用于url_for