Ruby on rails 4 Rails 4公共/或应用/资产中的静态资产/

Ruby on rails 4 Rails 4公共/或应用/资产中的静态资产/,ruby-on-rails-4,asset-pipeline,sprockets,asset-sync,Ruby On Rails 4,Asset Pipeline,Sprockets,Asset Sync,抱歉,如果这是一个冗长的问题,但我想让我的想法清楚 我现在已经在几个项目中使用了Rails 4,并且我一直在使用image\u标记('/assets/image.png')来绕过对Rails 4中资产路径助手工作方式的更改。直到今天,我才决定了解更多关于这些变化的信息,并发现它们。我还注意到Rails helpers中/actionview/lib/action\u view/helpers/ASSET\u url\u helper.rb中的ASSET\u PUBLIC\u目录只指向公共文件夹。

抱歉,如果这是一个冗长的问题,但我想让我的想法清楚

我现在已经在几个项目中使用了Rails 4,并且我一直在使用
image\u标记('/assets/image.png')
来绕过对Rails 4中资产路径助手工作方式的更改。直到今天,我才决定了解更多关于这些变化的信息,并发现它们。我还注意到Rails helpers中/actionview/lib/action\u view/helpers/ASSET\u url\u helper.rb中的
ASSET\u PUBLIC\u目录只指向公共文件夹。很明显,如果您访问静态文件,Rails希望您使用公用文件夹

现在我已经明白了这一点,我只是不明白为什么edge rails文档清楚地说明了这一点:

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

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

总而言之,我确实需要使用所有可用的助手和摘要构建器,因为我最终将我的资产部署到S3

所以我的问题是公正的;是否有一个正确的位置来放置图像/未编译的资源并使用资源路径帮助器?所有文档和其他堆栈溢出对话都是关于使用app/assets文件夹的人的,但是sprockets-rails希望我们对非摘要资产使用public。web上的文档和信息是否只需要更新,或者其他文档和信息是否只需要在所有资产路径前面加上/assets/


更新:我想我确实遇到了一个问题,我没有重新启动我的开发服务器,并且app/assets/images中的图像没有显示出来,所以它会退回到public。还请注意,我在回形针默认url中使用了资产助手(在我找到的几个堆栈溢出答案中,它被引用为指向资产的方法,但是在曲别针中使用带有插值选项的资产路径帮助程序也会退回到公共,因为显然,未合并的资产名称不会作为现有文件找到。

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

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

另外,Rails图像上传gem Carrierwave使用
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

希望这能有所帮助!

为了让通过谷歌搜索了解到这一点的人受益,Rails指南中介绍了资产,网址为