在电子邮件中呈现图像时出现奇怪错误

时间:2014-12-18 21:02:07

标签: ruby-on-rails image email ruby-on-rails-4 assets

我在生产模式下运行Ruby on Rails 4.1,并且从我的Web应用程序向我的GMail帐户发送了一封成功的电子邮件。此电子邮件包含图像(应用徽标),但此图像不会显示在邮件正文中。

在服务器端记录图像请求我收到以下错误:

ActionController::RoutingError (No route matches [GET] "/assets/my_app_logo.png")

检查我收到的电子邮件源代码:

<img class="CToWUd" alt="MyAppName" src="https://ci4.googleusercontent.com/proxy/J8xdV03MSjJGOJh6F8T5ntqhjC2YJAiShAWJshvcOLn9THWAC5hKwp4DCLc6csuoojWlaKzPXjt-6zBAkZZvzpYMH=s0-d-e1-ft#http://www.my_app_name.com/assets/my_app_logo.png">

有什么问题?我该如何解决?


在我的部分模板中,我有:

<%= link_to(image_tag("#{root_url}assets/my_app_logo.png", :alt => MyAppName), root_url.to_s) %>

@ kasperite评论后

更新

  

你能发布application.css中的内容吗?也是application.css   在资产/样式表下?

是的,我的application.css.scss文件是assets/stylesheets

// ...
.my_app_logo { background-image: image-url("my_app_logo.png"); display: inline-block; }
// ...

application.css.scss 用于呈现电子邮件。我使用上面部分模板中所述的代码。

1 个答案:

答案 0 :(得分:0)

我认为问题在于,您的资产被编译为生产后,my_app_logo.png在技术上不再存在。它实际上是通过在资产上附加指纹来重命名的,因此实际资产是my_app_logo-SOME_FINGERPRINT_STRING.png。

问题的关键在于你试图在你的image_tag助手中做一个绝对的图像路径。试着这样做:

<%= link_to(image_tag("my_app_logo.png", :alt => MyAppName), root_url.to_s) %>

这应该生成到重命名图像的正确链接。