我的项目中有这个目录结构:
- 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
所以它没有使用那里的子目录。
解决这个问题的最佳方法是什么,这样才能在开发和生产中发挥作用?是应该将所有图像公开写入一个目录,还是应该在引用图像时包含子文件夹?
答案 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
这是惯例,所以您不需要将它们放在公共文件夹中。在部署到生产环境时,资产预编译过程会通过维护资产清单将其转换为公用文件夹。