子目录和 Rails 资产管道
Subdirectories and the Rails assets pipeline
我的项目中有这样的目录结构:
- 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 的子目录下创建的。所以像这样:
- public
-- assets
--- game
--- avatars
但是在日志中我看到了这个:
http://demo1e97.lvh.me:3000/assets/avatar-edc80241a6bae07d6ed70cdffef15753.png
所以它没有使用那里的子目录。
解决此问题以使其在开发和生产中都能正常工作的最佳方法是什么? public是把所有的图片都写到一个目录下,还是在引用图片的时候把子文件夹包含进去?
在引用图像时,您应该始终包含相对路径(在 assets/images
下),如下所示:
<%= 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
只要您将子目录添加到图像、样式表、javascript,您就不需要将它们添加到资产路径。所有子目录变为/assets。
因此您当前的帮助将在此处生成:
<%= image_tag("game/avatar.png") %>
=> http://demo1e97.lvh.me:3000/assets/avatar.png
这是惯例,因此您无需将它们放在 public 文件夹中。当您部署到生产环境时,您的资产预编译过程将通过维护资产清单将其带到 public 文件夹。
我的项目中有这样的目录结构:
- 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 的子目录下创建的。所以像这样:
- public
-- assets
--- game
--- avatars
但是在日志中我看到了这个:
http://demo1e97.lvh.me:3000/assets/avatar-edc80241a6bae07d6ed70cdffef15753.png
所以它没有使用那里的子目录。
解决此问题以使其在开发和生产中都能正常工作的最佳方法是什么? public是把所有的图片都写到一个目录下,还是在引用图片的时候把子文件夹包含进去?
在引用图像时,您应该始终包含相对路径(在 assets/images
下),如下所示:
<%= 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 只要您将子目录添加到图像、样式表、javascript,您就不需要将它们添加到资产路径。所有子目录变为/assets。
因此您当前的帮助将在此处生成:
<%= image_tag("game/avatar.png") %>
=> http://demo1e97.lvh.me:3000/assets/avatar.png
这是惯例,因此您无需将它们放在 public 文件夹中。当您部署到生产环境时,您的资产预编译过程将通过维护资产清单将其带到 public 文件夹。