如何在邮件发送中使用资产管道(asset pipeline)的绝对路径来设置样式表?

9
在我的邮件模板中,视图助手给我提供了相对于样式表和图片的URL。当然,如果我在Gmail中查看邮件,这是行不通的。
在apps/views/layouts/mailer.html.erb中:
<%= stylesheet_link_tag "application" %>
...
<%= link_to(image_tag("logo.png"), "http://mysite.com") %>

渲染结果如下:

<link href="/assets/application-c90478153616a4165babd8cc6f4a28de.css" media="screen" rel="stylesheet" type="text/css" />
...
<a href="http://mysite.com"><img alt="Logo" src="/assets/logo-d3adbf8d0a7f7b6473e2130838635fed.png" /></a>

如何让Rails给我绝对链接?我使用的是Rails 3.1,资产管道已生效。

4个回答

13

`config.action_controller.asset_host用于处理由ActionController生成的视图中的主机前缀。

对于任何在电子邮件中生成的内容,您需要查找ActionMailer配置选项,更具体地说是:

  • ActionMailer :: Base.asset_host 将处理您的image_tags
  • ActionMailer :: Base.default_url_options [: host] 将管理您的link_to 标记。

例如:

ActionMailer::Base.asset_host                 = "http://blah.com"
ActionMailer::Base.default_url_options[:host] = "blah.com"
< p >< em >请注意,对于默认的URL主机,您不需要指定http前缀,但对于资源主机需要。 < p >我在应用程序初始化程序后面的environment.rb中指定了这些内容。我建议为每个环境的域设置一个应用配置变量。


12

对于Rails 3.2和ActionMailer,请使用以下代码:

config.action_mailer.asset_host = "http://www.example.com"

3
这可能有点取巧,但是如果你指定一个资产主机,所有的helpers在渲染链接时都会考虑它。因此,如果你设置了资产主机,所有的链接都将从该主机加载。
config.action_controller.asset_host = "http://mysite.com"

在您的配置中,stylesheet_link_tag 将包含主机名。

谢谢您的回复。不幸的是,这对于为邮件渲染的模板无效。还有其他想法吗? - rocketscientist
你打错字了,应该是 config.action_mailer.asset_host - Dex

0
在这个帖子中,rocketscientist和Joe询问了其他想法:

http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/stylesheet_link_tag

你可以按照以下方式生成完整的 CSS(如果你不关心资产托管)。然而,David Radcliffe 的回答应该也可以工作。
stylesheet_link_tag "http://www.railsapplication.com/style.css" # =>
  <link href="http://www.railsapplication.com/style.css" media="screen" rel="stylesheet" type="text/css" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接