我的rails应用程序(3.0.11)访问文件系统以下载用户通过SMB放入文件系统的文件。不幸的是,OS X Lion Server通过SMB使用这些权限创建文件......
rwx --- ---用户大家
...但它确实通过ACL添加了适当的权限。 rails运行的用户是“admin”,它可以通过ACL完全访问文件。现在问题是......
send_file表示无法访问该文件。如果我为该文件添加POSIX权限为“每个人”,其中管理员是这样的一部分...
rwx r-x ---用户大家
...然后它可以访问它,即使它应该只能通过ACL访问它。如果我将权限放回......
rwx --- ---用户大家
...然后尝试使用File.open而不是send_file rails可以读取该文件。我甚至可以使用打开的文件并将其提供给send_data并且可以正常工作,但是当我这样做时我不能使用X-Sendfile。
那么send_file会发生什么?
答案 0 :(得分:0)
Rails正在使用http://rack.rubyforge.org/doc/Rack/Sendfile.html,它基本上在响应中引入了一个标头(X-Sendfile)。然后,Web服务器负责将文件发送到客户端。
这就是为什么你必须让webserver用户可以访问该文件的原因(在基于Debian的系统上,这通常是www-data)。
看看上面的链接。它为您提供了Nginx,Lighttpd和Apache的配置示例。但另外,您必须使文件可读(例如)www-data。