当我在使用samba安装的目录中时,我无法通过XSendFile获取apache来提供文件。
给一点背景:我有一个Ruby on Rails应用程序正在慢慢取代ASP.NET应用程序,我让它在运行apache2和passenger的linux服务器上运行。运行ASP.NET代码的Windows机器正在共享我通过Samba挂载的上载目录。
每当我尝试使用X_SENDFILE标头发送文件时,我都会在我的apache服务器日志中找到它:
部分结果有效但处理不完整:xsendfile:无法获取stat文件:/ path / to / file
但是当我手动输入:stat / path / to / file时,它会给我文件统计信息。我知道文件在那里。 (我在用户apache运行后登录后也试过这个)据我所知,文件权限是正确的。
apache的XSendFile和SMB共享文件是否存在某种问题?
答案 0 :(得分:1)
可能是文件/权限问题(作为用户x,您无法访问y)。您可以尝试在其上执行chmod a + rwx ...
答案 1 :(得分:1)
我追踪了它。有时只需要有人指出显而易见的事情!
我在/ mnt / winbox-uploads上安装了samba共享 它安装时使用:dir_mode = 0777,file_mode = 0777(用于测试)所以我假设权限是大开的。但是,在检查/ mnt / winbox-uploads目录的权限后,我看到它们是:drwxrwx ---。这基本上意味着,如果我不是所有者或团体,我甚至无法进入该目录。
这还没有解决。请参阅以下注释
答案 2 :(得分:1)
Samba挂载与真正的unix文件系统没有相同的权限。请记住,samba主要是为Unix系统设计的 - > Windows客户端不是Windows服务器 - > unix客户端。像chmod等命令不能很好地工作。
接下来的问题是ruby非常不信任文件系统。如果它对访问文件感觉有点不舒服就放弃了。我有一些从使用acls而不是unix文件权限的nfs共享运行的rails应用程序,除非我回去并在tmp,log等上给设置用户或组,否则它们将无法运行,因为ruby甚至没有尝试查看访问文件,如果它没有看到用户/组权限,即使它会成功,因为有acl's。
要获得答案,请尝试克隆rails应用程序正在运行的文件框。