Rails 4公共/或app/assets /中的静态资产

Tay*_*Eke 20 sprockets asset-pipeline ruby-on-rails-4 asset-sync

对不起,如果这是一个简单问题的冗长积累,但我想清楚我的想法.

我现在已经在几个项目中使用了Rails 4,并且我一直在使用它image_tag('/assets/image.png')来解决资产路径助手在Rails 4中如何工作的变化.直到今天,当我决定更多地了解这些变化并发现第一次更改时注意在链轮轨道.我还注意到ASSET_PUBLIC_DIRECTORIESRails助手中的/actionview/lib/action_view/helpers/asset_url_helper.rb#L170只指向公用文件夹.对我来说很明显,如果你正在访问静态文件,Rails希望你使用公共文件夹.

所以现在我已经想到了这一点,我只是无法理解为什么edge rails docs清楚地说明了这一点:

在以前版本的Rails中,所有资产都位于公共子目录中,例如图像,javascripts和样式表.使用资产管道,这些资产的首选位置现在是app/assets目录.

image_path实际上会生成一个uri到public/images文件夹,这完全相反.

总而言之,我需要使用所有可用的帮助程序和摘要构建器,因为我最终使用asset_sync将资产部署到S3 .

所以我的问题只是; 是否有正确的位置来放置图像/非编译资产并使用asset_path助手?所有文档和所有其他堆栈溢出对话都是关于使用app/assets文件夹的人,但是sprockets-rails希望我们将public用于非摘要资产.网络上的文档和信息是否需要更新,或者其他人只是通过在/ assets /之前预先设置所有资产路径来实现?

更新:我认为我确实遇到了一个问题,我没有重新启动我的开发服务器,并且app/assets/images中的图像没有显示出来,所以它会回退到公众面前.还要注意我在我的paperclip default_url中使用了资产助手(在我找到的几个堆栈溢出答案中引用资源的方式被引用,但是在回形针中使用带有插值选项的资产路径助手也将回退到公众,因为未插入的资产名称显然不会被发现为现有文件.

Ama*_*H-V 31

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

所以,回答你的问题,这是我的想法.如果您的图像是用于您的网站布局,例如徽标或背景,那么您应该将它们存储在app/assets/images目录中,但是,如果图像是用户生成的,例如个人资料图像,那么这些图像应该直接存储在诸如public/images.理想情况下,您可以将它们存储在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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!