Rails 4静态资产在公共/或应用程序/资产/
对不起,如果这是一个简单问题的长期积累,但我想清楚我的想法。
我已经在几个项目中使用Rails 4,并且我一直使用image_tag('/assets/image.png')
来解决资产路径助手在Rails 4中的工作方式。直到今天,我决定了解更多关于这些变化的信息,并在sprockets-rails中找到了这个第一个变更说明。 我还注意到,Rails助手中的ASSET_PUBLIC_DIRECTORIES
中的ASSET_PUBLIC_DIRECTORIES仅指向公用文件夹。 对我来说很明显,如果你正在访问静态文件,Rails希望你使用公用文件夹。
所以现在我已经明白了这一点,我只是不明白为什么边缘导轨文档清楚地说明了这一点:
在以前的Rails版本中,所有资产都位于公共的子目录中,例如图像,javascript和样式表。 通过资产管道,这些资产的首选位置现在是应用/资产目录。
在实践中image_path会生成一个uri到public / images文件夹,这完全相反。
总而言之,我确实需要使用所有可用的帮助程序和摘要构建器,因为我最终使用asset_sync将我的资产部署到了S3。
所以我的问题只是; 有没有一个放置图像/非编译资产并使用asset_path助手的正确位置? 所有文档和其他堆栈溢出对话都是关于使用应用程序/资产文件夹的人,但是sprocket-rails希望我们使用公开的非消化资产。 网络上的文档和信息是否需要更新,或者其他人是否只是将所有资产路径预先设置为/ assets /?
更新:我认为我确实有一个问题,我没有重新启动我的开发服务器,应用程序/资产/图像中的图像没有显示出来,所以它会回退到公众。 另外请注意,我在我的回形针default_url中使用了资产助手(作为在我发现的几个堆栈溢出答案中指向资产的方式,但是在回形针中使用具有内插选项的资产路径助手也会回退到公共状态,因为未插入的资产名称显然不会作为现有文件找到。
当您使用rake assets:precompile
,Rails将所有资产从您的app/assets
文件夹移至public/assets
。 这是因为普通浏览器无法访问您的app
目录,但可以访问public
。
所以,回答你的问题,这是我的想法。 如果您的图片适用于您的网站布局,例如徽标或背景,那么您应该将它们存储在app/assets/images
目录中,但是,如果图像是用户生成的,例如个人资料图像,则应直接存储作为public/images
。 理想情况下,您可以将这些存储在S3或CDN中,但您已经这么做了。
作为奖励,Rails图像上传宝石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
希望这可以帮助!
链接地址: http://www.djcxy.com/p/79017.html