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

我试图把一些外部图像(由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并列出了这些dirs:

 ..../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 

正如你可以看到/供应商/资产/图像列在那里。 如果我把我的形象应用程序/资产/图像一切正常。

我认为,新的资产pipe道应该通过所有的资产目录,并为所要求的文件提供服务。

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

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

我的猜测是,轨道服务器不会检查这些目录,如果他们不存在,当它第一次启动。 当你打开一个rails控制台来诊断问题时,你会得到一个了解目录的新的rails实例,这只会增加混淆。

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

即你必须把你的图像放在一个文件夹'./app/assetshttp://img.dovov.comimages'或者你必须编辑jquery-ui css文件并删除'images /'文件夹前缀。

资产pipe道在Ryan Bigg的导轨指南中有描述(目前的草案状态)。

http://ryanbigg.com/guides/asset_pipeline.html和http://ryanbigg.com/2011/06/sprocket-asset-tags-internals/以供参考。;

据此,你的例子应该工作。

提取:

资产可以放置在三个位置之一的应用程序中:应用程序/资产,库/资产或供应商/资产。

应用程序/资产适用于应用程序所拥有的资产,例如自定义图像,JavaScript文件或样式表。

lib / assets是用于你自己的库的代码,这些代码并不适合应用程序的范围,也不适用于跨应用程序共享的库。

供应商/资产是针对外部实体拥有的资产,例如JavaScript插件的代码。

存在于这三个位置的任何子目录都将被添加到Sprockets的searchpath中(通过在控制台中调用Rails.application.config.assets.paths可见)。 当请求资产时,将查看这些path是否包含与指定名称匹配的资产。 一旦资产被find,它就会被链轮处理,然后提供服务。

我已经在我的应用程序中使用了一个示例进行了testing,其语法与您的作品相同。 也许你的资产名称有错字。

对于Martin来说:通过在控制台中调用Rails.application.config.assets.paths可以看到Sprockets的searchpath。

也许你应该在/ assets / images中创build另一个文件夹。 你创build一个名字“图像”,然后你只需要复制所有jquery-ui图像并粘贴到你之前创build的文件夹“图像”上。 希望这会帮助你。