我有一些模板文件,我想在我的rails应用程序中使用.我想知道给出两个场景的位置(在哪个目录下):
>它们是我的应用程序专用的(只有网站站长可以删除,更改它们)
>它们是我的应用程序的私有,但它们也可以由管理员管理(删除,修改)
解决方法
评论后更新
由于您希望在本地提供文件,只需将它们放在/ public /文件夹之外,并放在任何/ assets /文件夹之外,您应该很好.您可以在此处阅读有关公共和资产文件夹的更多信息:Section 2 How to use the Asset Pipeline让我们说:
/private/
我相信在我原来的答案中链接的SO问题中使用的Section 11 send_file仍然是通过控制器而不是静态提供文件访问的方式.改编自文档:
send_file("#{Rails.root}/private/#{filename}",:filename => "#{filename}",:type => "application/pdf",#for example if pdf :disposition => 'inline') #send inline instead of attachment
远程服务的原始答案与send_file一起使用
关于1)应用程序私有的文件
您可以将这些私有文件锁定在像Amazon S3这样提供授权访问的系统中,如Callmeed在this SO question中所解释的那样.然后只有您的应用程序才能授权访问文件.
关于2)管理员也可以访问
仅使用第1部分的问题在于它在一段有限的时间内解锁文件,在此期间我认为它们是公开可用的.因此,如果你想解决这个问题,我认为你需要从Pavel Shved的解决方案实际上在上面的相同SO问题中.
在该解决方案中,文件通过路由/控制器提供,该路由/控制器提供文件的二进制数据,而不是使用指向文件的URL.
综合解决方案
从S3读取文件,只有您的应用程序有权访问(不公开).然后直接通过控制器提供数据,控制器可以授权任何人.
注意事项
>直接从控制器提供二进制数据似乎会破坏它的性能应用程序,如果它经常使用,但我从来没有尝试过.>如果您能找到更简单的方法来完成第1部分,第2部分仍然可以使用该解决方案