image_tag没有使用我设置的asset_host。有什么想法吗?我唯一能想到的就是它与Mailer一样。
配置/环境/ 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="/images/logo.png?1303090162" style="margin-left:10px; padding-bottom:15px;" />
在控制台中:
> MyApp::Application.config.action_controller
#<OrderedHash {… :asset_host=>"http://localhost:3000", …}>
我需要image_tag来创建完整路径网址,因为它会显示在电子邮件中。
答案 0 :(得分:92)
之前我错了。这是您需要的解决方案(直到rails 3.1,其中asset_host配置变得统一):
config.action_mailer.asset_host = "http://localhost:3000"
答案 1 :(得分:22)
我们需要在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中也是如此。
答案 2 :(得分:0)
关于你为什么不能这样做的违规代码在这里:
# 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 View模板缺少Controller,因此您无法根据asset_host获取重写命令。这应该是向Rails核心团队开放的门票。
您可以尝试以下配置,看看是否有帮助:
config.action_mailer.default_url_options = {:host=>"localhost", :port=>3000, :protocol=>"http://"}
我很确定它只适用于url_for
。