【发布时间】:2013-12-06 19:13:17
【问题描述】:
抱歉,如果这是一个简单问题的冗长补充,但我想弄清楚我的想法。
我现在在几个项目中使用了 Rails 4,并且一直在使用 image_tag('/assets/image.png') 来解决资产路径助手在 Rails 4 中的工作方式的变化。直到今天,我才决定了解更多关于更改并找到this first change note in sprockets-rails。我还注意到 Rails 助手中 /actionview/lib/action_view/helpers/asset_url_helper.rb#L170 中的 ASSET_PUBLIC_DIRECTORIES 仅指向公共文件夹。对我来说很明显,如果您正在访问静态文件,Rails 希望您使用公用文件夹。
既然我已经弄清楚了,我就是不明白为什么 edge rails docs 清楚地说明了这一点:
在以前的 Rails 版本中,所有资源都位于 public 的子目录中,例如图像、javascript 和样式表。使用资产管道,这些资产的首选位置现在是 app/assets 目录。
实际上,image_path 会生成一个指向 public/images 文件夹的 uri,这完全相反。
总而言之,我确实需要使用所有可用的帮助器和摘要构建器,因为我最终使用 asset_sync 将我的资产部署到 S3。
所以我的问题很简单;是否有 正确 放置图像/非编译资产和使用asset_path 助手的地方?所有文档和所有其他堆栈溢出对话都是关于人们使用 app/assets 文件夹的,但 sprockets-rails 希望我们将 public 用于非摘要资产。网络上的文档和信息是否只是需要更新,还是其他人只是在所有资产路径前加上 /assets/?
更新:我认为我确实遇到了一个问题,即我没有重新启动我的开发服务器,并且 app/assets/images 中的图像没有显示,因此它会回退到公共。另请注意,我在回形针 default_url 中使用了资产助手(在我发现的几个堆栈溢出答案中,它被引用为指向资产的方式,但是在回形针中使用带有插值选项的资产路径助手也将回退到公共,因为显然,未插入的资产名称不会作为现有文件被发现。
【问题讨论】:
-
为了方便任何通过谷歌搜索发现此问题的人,Rails 指南中描述了资产guides.rubyonrails.org/asset_pipeline.html
标签: ruby-on-rails-4 asset-pipeline sprockets asset-sync