Rails 4资产管道供应商资产图像未预编译

62

我在我的应用程序中使用Rails 4和Ruby 1.9.3以及fancybox2-rails gem,但是资产管道存在一个普遍问题。如果我运行rake task进行预编译,那么除了vendor/assets/images../gems/ruby-1.9.3-p327/gems/fancybox2-rails-0.2.1/vendor/assets/images文件夹中的图像外,其他一切都很好。这两个文件夹中的图像没有被预编译,最终导致无法找到不存在的图像的死链接问题。有什么建议吗?

3个回答

81

似乎默认情况下只包含来自app/assets文件夹的图像。因此,解决方案是将此行添加到config/application.rb中。

config.assets.precompile += %w(*.png *.jpg *.jpeg *.gif)

3
这对我有用,但是这个配置应该放到config/environments/production.rb文件中。然而,在Rails 4.0.0.beta1中这个配置目前无法使用(详见 https://github.com/rails/rails/issues/9572 和 https://github.com/rails/sprockets-rails/pull/36)。 - ottobar
1
我最初有两张图片无法加载,fancybox_loading.gif 和 fancybox_overlay.png,这修复了 overlay.png 但 loading.gif 仍然无法工作。 - Jamesla
将其放入production.rb文件中,但在部署时没有帮助。编译后的资源中没有fancybox图像。 - Almaron
3
这里没有供应商/资产链接?对我来说好像没有起作用。 - Pratik Khadloya
我认为供应商目录现在已经从预编译过程中排除了? - wired00

9

听起来Sporker无法从vendor/assets/images自动加载图像。

2.2 资产组织 管道资产可以放置在应用程序的三个位置之一中:app/assets、lib/assets或vendor/assets。

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

lib/assets用于您自己的库代码,这些代码实际上不适合应用程序的范围,或者是跨应用程序共享的库。

vendor/assets用于由外部实体拥有的资产,例如JavaScript插件和CSS框架的代码

根据guides.rubyonrails.org的描述,我认为他们没有无意地忽略vendor/assets/images。

所以我只是添加了以下行:

#config/application.rb
config.assets.paths << Rails.root.join("vendor", "assets", "images")

我解决了我的问题。 希望这对你有用。


6

对于我的Rails 4.2.x项目,我刚刚将供应商图像移动到vendor/assets/images并将其添加到application.rb中:

config.assets.precompile += %w(vendor/assets/images/*)

在开发和生产环境中都可以正常工作。


这在我的Rails 5应用程序上运行良好,所以现在image_tag('image.png')返回正确的图像。 - Aaron Castro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接