在Rails应用程序中放置私有文档的位置?

Ram*_*ujo 5 file-upload ruby-on-rails file ruby-on-rails-3.1

我有一些模板文件,我想在我的rails应用程序中使用.我想知道给出两个场景的位置(在哪个目录下):

  1. 它们是我的应用程序专用的(只有网站站长可以删除,更改它们)
  2. 它们对我的应用程序是私有的,但也可以由管理员管理(删除,修改)

Kob*_*ohn 7

评论后更新

由于您希望在本地提供文件,只需将它们放在/ public /文件夹之外和任何/ assets /文件夹之外,您应该很好.您可以在此处阅读有关公共和资产文件夹的更多信息:第2节如何使用资产管道让我们说:

/private/
Run Code Online (Sandbox Code Playgroud)

我相信在我原来的答案中链接的SO问题中使用的第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
Run Code Online (Sandbox Code Playgroud)

远程服务的原始答案与send_file一起使用

关于1)应用程序 私有的文件您可以将这些私有文件锁定在像Amazon S3这样提供授权访问的系统中,正如Callmeed在此SO问题中所解释的那样.然后,只有您的应用程序才能授权访问文件.

关于2)管理员也可以访问

仅仅使用第1部分的问题是它在一段有限的时间内解锁文件,在此期间我认为它们是公开可用的.因此,如果你想解决这个问题,我认为你需要从Pavel Shved那里获得解决方案,实际上是在上面的同一个问题中.

在该解决方案中,文件通过路径/控制器提供,该路由/控制器提供文件的二进制数据,而不是使用指向文件的URL.

综合解决方案

从S3读取文件,只有您的应用程序有权访问(不公开).然后直接通过控制器提供数据,控制器可以授权任何人.

注意事项

  • 直接从控制器提供二进制数据似乎会在经常使用它时会破坏应用程序的性能,但我从未尝试过.
  • 如果您能找到更简单的方法来完成第1部分,那么第2部分仍然可以使用该解决方案