Ruby on rails 3 - mailer中的image_tag没有使用asset_host



image_tag没有使用我设置的asset_host。知道为什么吗?我能想到的唯一一件事就是它与梅勒有关。

配置/环境/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来创建一个完整的路径url,因为它将显示在电子邮件

我之前就错了。这是您需要的解决方案(直到rails 3.1, asset_host配置统一):

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

我们需要指定config.action_controller。Asset_host和config.action_mailer。在Rails 3.1和3.2上的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视图模板缺少一个控制器,你不会得到基于asset_host重写的命令。这应该是一个向Rails核心团队开放的票证。

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

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

我很确定这只适用于url_for

相关内容

  • 没有找到相关文章

最新更新