Rails - heroku资源路径中图像的绝对URL

时间:2015-11-05 06:19:15

标签: ruby-on-rails url heroku asset-pipeline

我在app/assets/images/admin目录下有图片。

在开发中,我使用了类似的东西来获取URL

#{root_url}assets/admin/filename.jpg

但它不适用于Heroku。

那么在Heroku上的资源文件夹下引用图像的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

使用image_tag('admin/filename.jpg')获取带有图片部分的html:

development# => <img alt="Rails" src="http://yourhost/assets/admin/filename.jpg" />
production# => <img alt="Rails" src="http://yourhost/assets/admin/filename-5643564625453543.jpg" />

使用image_path("admin/filename.jpg")获取如下路径:

development# => "/assets/admin/filename.jpg"
production# => "/assets/admin/filename-5643564625453543.jpg"

使用image_url("admin/filename.jpg")获取完整的网址:

development# => "http://yourhost/assets/admin/filename.jpg"
production# => "http://yourhost/assets/admin/filename-5643564625453543.jpg"

您可以获得有关

的更多信息

The Assets Pipeline

Asset URL Helper

答案 1 :(得分:1)

  

资产文件夹

下的参考图像

如果您使用image_tag,无论您是production还是development,都可以调用相对路径:

<%= image_tag "admin/filename.jpg" %>

-

如果您在 CSS 中调用图片,则需要使用asset-path or asset-url

#app/assets/stylesheets/application.css
.header {
   background: asset-url("admin/filename.png");
}

您遇到的问题与asset fingerprinting有关。

当您预编译您的资产(Heroku中需要)时,所有imagescssjavascript等都会被放入{{1文件夹。更重要的是,每个文件都是指纹(附加了一些数字):

public/assets

因此,当您处于“生产”时,调用global-908e25f4bf641868d8683022a5b62f54.css 将导致 404 ,因为该文件将不存在

您需要使用其中一个路径助手(上图)来确保Rails可以选择正确的文件,无论您使用哪种环境。