【问题标题】:Rails 4 static assets in public/ or app/assets/在 public/ 或 app/assets/ 中的 Rails 4 静态资产
【发布时间】: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 中使用了资产助手(在我发现的几个堆栈溢出答案中,它被引用为指向资产的方式,但是在回形针中使用带有插值选项的资产路径助手也将回退到公共,因为显然,未插入的资产名称不会作为现有文件被发现。

【问题讨论】:

标签: ruby-on-rails-4 asset-pipeline sprockets asset-sync


【解决方案1】:

当您使用rake assets:precompile 时,Rails 会将所有资产从您的app/assets 文件夹移动到public/assets。这是因为普通浏览器无法访问您的app 目录,但可以访问public

所以,为了回答你的问题,这是我的想法。如果您的图像用于您的站点布局,例如徽标或背景,那么您应该将它们存储在 app/assets/images 目录中,但是,如果图像是用户生成的,例如个人资料图像,那么这些应该直接存储在诸如 @ 987654327@。理想情况下,您会将这些存储在 S3 或 CDN 中,但您已经这样做了。

作为奖励,Carrierwave,Rails 图像上传 gem,使用 public/images 类型路径作为其图像的默认存储,如您在其配置文件中所见:

    # Override the directory where uploaded files will be stored.
    # This is a sensible default for uploaders that are meant to be mounted:
     def store_dir
     "images/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
     end

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2012-04-09
    • 2016-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    • 1970-01-01
    相关资源
    最近更新 更多