【发布时间】:2015-11-05 06:19:15
【问题描述】:
我在app/assets/images/admin 目录下有图像。
在开发中,我使用过类似的方法来获取 URL
"#{root_url}assets/admin/filename.jpg"
但它不适用于 Heroku。
那么在 Heroku 上的 assets 文件夹下引用图像的最佳方法是什么?
【问题讨论】:
标签: ruby-on-rails url heroku asset-pipeline
我在app/assets/images/admin 目录下有图像。
在开发中,我使用过类似的方法来获取 URL
"#{root_url}assets/admin/filename.jpg"
但它不适用于 Heroku。
那么在 Heroku 上的 assets 文件夹下引用图像的最佳方法是什么?
【问题讨论】:
标签: ruby-on-rails url heroku asset-pipeline
assets文件夹下的参考图片
如果您使用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 中是必需的)时,所有 images、css、javascript 等都将放入 public/assets 文件夹中。更重要的是,每个文件都经过指纹(附加了一些数字):
global-908e25f4bf641868d8683022a5b62f54.css
因此,当您处于“生产”状态时,调用#{root_url}assets/admin/filename.jpg 将导致404,因为该文件将不存在。
您需要使用一个路径助手(如上)来确保 Rails 能够挑选出正确的文件,无论您使用的是哪种环境。
【讨论】:
使用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"
您可以获取更多信息
【讨论】:
image_url?
http://myhost.com/assets/admin/filename.jpg 访问图像文件,我也会收到 page doesn't exist 错误。
http://myhost.com/assets/admin/filename.jpg 访问图像文件,我会在 heroku 中收到 page doesn't exist 错误。有什么帮助吗?