Subdirectories和Rails资产管道

时间:2015-06-27 15:29:54

标签: ruby-on-rails asset-pipeline assets

我的项目中有这个目录结构:

- assets
-- images
--- game
--- avatars

我用这样的代码在头像中引用图像:

image_tag('avatar.png')

在开发中这是有效的,在生产中我遇到了错误。

我在application.rb

中有这段代码
Dir.glob("#{Rails.root}/app/assets/images/**/").each do |path|
  config.assets.paths << path
end

当我在开发中编译我的资产时,我发现它们是在公共场所,在它们的子目录下创建的。像这样:

- public
-- assets
--- game
--- avatars

但是在日志里我看到了这个:

http://demo1e97.lvh.me:3000/assets/avatar-edc80241a6bae07d6ed70cdffef15753.png

所以它没有使用那里的子目录。

解决这个问题的最佳方法是什么,这样才能在开发和生产中发挥作用?是应该将所有图像公开写入一个目录,还是应该在引用图像时包含子文件夹?

2 个答案:

答案 0 :(得分:1)

引用图像时应始终包含相对路径(在<%= image_tag("avatars/avatar.png") %> 下),如下所示:

app/assets/images/avatars/avatar.png

这将解析位于application.rb的文件,并确保它适用于所有环境。然后,您可以从Dir.glob("#{Rails.root}/app/assets/images/**/").each do |path| config.assets.paths << path end 完全删除此代码:

{{1}}

答案 1 :(得分:0)

点数:1 只要您将子目录添加到图像,样式表,javascripts,您就不需要将它们添加到资源路径中。所有子目录都成为/ assets。

所以你现在的帮助会在这里生成:

<%= image_tag("game/avatar.png") %> 
=> http://demo1e97.lvh.me:3000/assets/avatar.png

这是惯例,所以您不需要将它们放在公共文件夹中。在部署到生产环境时,资产预编译过程会通过维护资产清单将其转换为公用文件夹。