Rails 3.1:在邮件程序视图文件中显示图像时出现问题

use*_*052 18 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 asset-pipeline

我正在使用Ruby on Rails 3.1,我想将我的网站徽标(即通过新资产管道处理的图像)添加到电子邮件中.

如果在我的邮件程序视图文件中,我说明以下内容:

<% # Note: '@root_url' is my application hostname (eg: http://www.mysite.com) %>
<%= link_to image_tag( "#{@root_url.to_s}/images/logo.png"), @root_url.to_s %>
Run Code Online (Sandbox Code Playgroud)

它不能在生产模式下工作(也就是说,我无法显示徽标图像),因为我认为资产管道使用指纹识别技术,而在收到的电子邮件中却没有.检查电子邮件中的HTML徽标元素我得到如下内容:

<img src="http://www.mysitecom/images/logo.png"> # without Fingerprinting
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?


在我的production.rb文件中,我有以下注释掉的代码:

# Enable serving of images, stylesheets, and javascripts from an asset server
# config.action_controller.asset_host = "http://assets.example.com"
Run Code Online (Sandbox Code Playgroud)

equ*_*nt8 29

in config/environments/production.rb (和其他需要的环境文件)添加:

config.action_mailer.asset_host = 'http://mysite.com'
Run Code Online (Sandbox Code Playgroud)

之后rails会自动在生成的路径前添加主机名 image_tag

# haml
= image_tag 'foo.jpg'
Run Code Online (Sandbox Code Playgroud)

会变成

#html
<img alt="" src="http://mysite.com/assets/foo.jpg" >
Run Code Online (Sandbox Code Playgroud)

......同样适用 image_path

#haml
%table#backgroundTable{background: image_path('email-background.jpg'), width: '100%', :border => "0", :cellpadding => "0", :cellspacing => "0"}
Run Code Online (Sandbox Code Playgroud)

会变成

<table background="http://mysite.com/assets/email-background.jpg" border="0" cellpadding="0" cellspacing="0" id="backgroundTable" width="100%">
Run Code Online (Sandbox Code Playgroud)

小心!!!

# this will make your emails display images
config.action_mailer.asset_host = 'http://mysite.com'
Run Code Online (Sandbox Code Playgroud)

不同于

# this wont make your email images work
config.action_controller.asset_host = "http://mysite.com" 
Run Code Online (Sandbox Code Playgroud)


Iro*_*com 9

所有这些答案都假设您正在使用资产管道,但是从您的示例中,您在/ public/images中指定了一个图像 - 这不是资产管道的一部分,因此所有asset_path基础答案都不起作用,而且你的初始指纹假设是不正确的.

如果你把/公/图像的图像,你希望你的形象标签有一个srchttp://yoursite.com/images/the-image.jpeg,无指纹,无资产路径,什么-只是它硬编码到您的看法:

<img src="<%=@root_url%>/images/logo.png">
Run Code Online (Sandbox Code Playgroud)

但是,你必须在该位置实际拥有该文件!如果您的图像位于/ app/assets/images中,那么您需要使用image_tag和资产管道,因为其他人已经回答了问题.


小智 -2

如果您编译您的资产:

RAILS_ENV=production bundle exec rake assets:precompile
Run Code Online (Sandbox Code Playgroud)

并在您的视图中使用 asset_path :

<%= link_to image_tag( asset_path('logo.png') ), @root_url.to_s %>
Run Code Online (Sandbox Code Playgroud)

——它应该在开发和生产中都有效。这就是我的视图和 .css.scss.erb 样式表的做法。我认为它对于邮件发送者来说没有什么区别。

  • 这对我不起作用。它生成以下 HTML 代码:`&lt;img src="http://assets/system/logo.png"&gt;`(没有指纹和主机名)。 (2认同)