资产管道路由助手解析为错误的URL或路径

时间:2014-01-29 06:20:07

标签: ruby-on-rails asset-pipeline

由于某种原因,除了image_tag之外,我的所有资产助手都遇到了问题。它们都在产生错误的路径。我使用的是Rails 4.0.0和Ruby 2.0.0。我的图片位于/app/assets/images

e.g。

asset_url('this.png')    # -> /this.png
asset_path('this.png')   # -> /this.png
image_url('this.png')    # -> /images/this.png
image_path('this.png')   # -> /images/this.png
image-url('this.png')    # -> /images/this.png
asset-url('this.png')    # -> /this.png
image_tag('this.png')    # -> <img ... src="/assets/this.png" /> <- only correct one

我的网址总是错误的...我需要/assets/this.png,这似乎只是由image_tag生成的

这种情况发生在.haml.scss.erb等。

我无法找到解决这个问题的方法......之前有人见过这个并得到答案吗?

3 个答案:

答案 0 :(得分:4)

我和你有同样的问题。我关注了this thread,并通过清除tmp缓存来解决问题。

$ rake tmp:cache:clear

希望它有所帮助。

答案 1 :(得分:1)

image_path已被弃用。请检查ApiDock

Method deprecated or moved
This method is deprecated or moved on the latest stable version. The last existing version (v3.2.13) is shown here.

These similar methods exist in v4.0.2:

ActionView::Helpers::AssetUrlHelper#image_path

对于 image_tag docs清楚地说Returns an HTML image tag for the source. The source can be a full path or a file. 所以在那种情况下它指向的路径是/assets/file_name.png

whereas for **image_path**计算公共图像目录中图像资源的路径。来自文档根目录的完整路径将通过 路径是/images/filename.png

答案 2 :(得分:0)

我在使用新的Rail 4.2.1应用程序开发时遇到了这个问题。我有:

body
{
    background: #EFEFEF image-url('layouts/background.jpg') no-repeat top center fixed;
}

和SASS愉快地产生了:

body
{
    background: #EFEFEF url('/images/layouts/background.jpg') no-repeat top center fixed;
}

经过几个小时的故障排除后,我发现这种行为是由路径拼写引起的!包含我想要的图片的目录是layout,而不是layouts

一旦我更正了路径,就会按预期生成url(/assets/layout/background.jpg)

更新12NOV2015 我再次遇到这个问题,这次是image_tag()。我的路径拼写正确(图像在开发中工作正常),但我从文件路径中省略了“.png”。这在开发中工作得很好,但显然不在生产中。一旦我将“.png”添加到路径中,image_tag()就有了正确的路径。

这种行为很荒谬。不知道为什么它会恢复到某个非标准路径(/images而不是/assets)而不是抛出异常(但我也没有费心去查看源代码)。