1

当文件位于使用 samba 挂载的目录中时,我无法让 apache 通过 XSendFile 提供文件。

提供一点背景知识:我有一个 Ruby on Rails 应用程序正在慢慢取代 ASP.NET 应用程序,我让它在运行 apache2 和乘客的 linux 服务器上运行。运行 ASP.NET 代码的 Windows 机器共享一个我通过 Samba 挂载的上传目录。

每当我尝试使用 X_SENDFILE 标头发送文件时,我都会在我的 apache 服务器日志中得到这个:

部分结果有效但处理不完整:xsendfile:无法统计文件:/path/to/file

但是当我手动输入: stat /path/to/file 它会给我文件统计信息。我知道文件在那里。(我在登录用户 apache 后也尝试过此操作)据我所知,文件权限是正确的。

apache 的 XSendFile 和 SMB 共享上的文件是否存在某种问题?

4

3 回答 3

1

我追踪了它。有时它只需要某人指出显而易见的事情!

我在 /mnt/winbox-uploads 上安装了 samba 共享它安装了:dir_mode=0777,file_mode=0777(用于测试)所以我假设权限是完全开放的。但是,在检查 /mnt/winbox-uploads 目录的权限后,我看到它们是:drwxrwx---。这基本上意味着,如果我不是所有者或组,我什至无法进入目录。

这还没有解决。请参阅下面的说明

于 2010-09-07T22:20:01.313 回答
1

可能是文件/权限问题(作为用户 x,您无法访问 y)。您可以尝试对其进行 chmod a+rwx ...

于 2010-09-01T23:23:30.953 回答
1

Samba 挂载与在真正的类 unix 文件系统上获得的权限不同。请记住,samba 主要是为 Unix 系统 -> windows 客户端而不是 windows 服务器 -> unix 客户端设计的。chmod 等命令不能很好地工作。

然后下一个问题是 ruby​​ 非常不信任文件系统。如果它对访问文件感到有一点不舒服,它就会放弃。我有一些从使用 acls 而不是 unix 文件权限的 nfs 共享运行的 Rails 应用程序,除非我返回并在 tmp、日志等上设置用户或组,否则它们将不会运行,因为 ruby​​ 甚至没有尝试查看实际访问该文件,如果它没有看到用户/组权限,即使它会成功,因为有 acl 的。

要获得答案,请尝试将文件克隆到运行 rails 应用程序的盒子中。

于 2010-09-08T16:27:23.463 回答