Rails 3.1提供来自供应商/资产/图像的图像

Slo*_*vic 49 ruby-on-rails-3 ruby-on-rails-3.1 asset-pipeline

我试图在我的Rails 3.1应用程序中将一些外部图像(由jQuery插件使用)放到供应商/资产/图像中.问题是,当我尝试这样的事情:

<%= image_tag "ui-bg_flat_75_ffffff_40x100.png" %>
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

No route matches [GET] "/assets/ui-bg_flat_75_ffffff_40x100.png"
Run Code Online (Sandbox Code Playgroud)

我检查了我的Rails.application.config.assets.paths并列出了这些目录:

..../app/assets/images
..../app/assets/javascripts
..../app/assets/stylesheets
..../vendor/assets/images
..../vendor/assets/stylesheets
..../.rvm/gems/ruby-1.9.2-p180@mygems/gems/jquery-rails-1.0.9/vendor/assets/javascripts
Run Code Online (Sandbox Code Playgroud)

如您所见,/ vendor/assets/images列在那里.如果我将我的图像放到app/assets/images,一切正常.

我认为新资产管道应该遍历所有资产目录并在任何地方提供所请求的文件.

有谁知道这里的问题是什么?

Adr*_*eil 79

创建vendor/assets/images目录后,我不得不重新启动rails服务器.在此之前,我看到了与你相同的错误("没有路线匹配[GET]").

我的猜测是,如果这些目录在首次启动时不存在,则它不会检查这些目录.当您打开rails控制台来诊断问题时,您将获得一个知道目录的新的rails实例,这只会增加混乱.


woe*_*fle 22

如果您使用的是jQuery UI Theme Roller主题,那么问题可能是在jquery-ui css文件中,图像在子文件夹'images'中被引用.

即你要么必须将图像放在文件夹中,'./app/assets/images/images'要么必须编辑jquery-ui css文件并删除'images /'文件夹前缀.

  • 你可能会在javascript控制台中看到`GET http://example.com/assets/images/darrowleft.gif 404(Not Found)`并且你在`vendor/assets/images`中有这个图像,这有点令人困惑.但是,你*应该*看到URL的http:// example.com/assets/darrowleft.gif`.要查看`http:// example.com/assets/images/darrowleft.gif`,您必须将该图像放在`vendor/assets/images/images`中,如@woelfle所述.这样做可以省去修改销售CSS文件中路径的麻烦. (8认同)

vin*_*uel 9

Ryan Bigg在此导轨指南中描述了资产管道(目前的草案状态).

http://ryanbigg.com/guides/asset_pipeline.htmlhttp://ryanbigg.com/2011/06/sprocket-asset-tags-internals/参考.

根据这个,你的例子应该工作.

提取:

资产可以放置在三个位置之一的应用程序内:app/assets,lib/assets或vendor/assets.

app/assets适用于应用程序拥有的资产,例如自定义图像,javascript文件或样式表.

lib/assets适用于您自己的库代码,这些代码并不真正适合应用程序的范围或跨应用程序共享的库.

vendor/assets适用于外部实体拥有的资产,例如JavaScript插件的代码.

这三个位置中存在的任何子目录都将添加到Sprockets的搜索路径中(通过在控制台中调用Rails.application.config.assets.paths可见).请求资产时,将查看这些路径以查看它们是否包含与指定名称匹配的资产.找到资产后,它由Sprockets处理,然后提供.

我已经在我的应用程序中测试了一个示例,并且与您的工作语法相同.也许你的资产名称有拼写错误.

对于Martin:通过在控制台中调用Rails.application.config.assets.paths可以看到Sprockets的搜索路径.