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

时间:2011-07-03 09:42:41

标签: ruby-on-rails-3 ruby-on-rails-3.1 asset-pipeline

我正在尝试将一些外部图像(由jQuery插件使用)放到我的Rails 3.1应用程序中的供应商/资产/图像中。问题是当我尝试类似的东西时:

<%= image_tag "ui-bg_flat_75_ffffff_40x100.png" %>

我收到错误:

No route matches [GET] "/assets/ui-bg_flat_75_ffffff_40x100.png"

我检查了我的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

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

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

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

4 个答案:

答案 0 :(得分:80)

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

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

答案 1 :(得分:22)

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

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

答案 2 :(得分: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的搜索路径。

答案 3 :(得分:2)

也许您应该在/ assets / images中创建另一个文件夹。你创建一个名称'images',然后你只需复制所有jquery-ui图像并粘贴你之前创建的文件夹'images'。希望这会对你有所帮助。