我在生产模式下运行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) %>
更新
你能发布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
用于呈现电子邮件。我使用上面部分模板中所述的代码。
答案 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) %>
这应该生成到重命名图像的正确链接。