我们可以从django apache中的mount驱动器中读取文件

时间:2013-10-17 11:07:46

标签: django apache python-2.6

我正在编写一个函数来获取django应用程序中的文件大小。

我们正在通过apache服务器运行Django应用程序。

文件位于其他位置。我们通过已安装的路径获取该文件。

代码如下,

import os
filePath = '/mnt/file.html'
size = flaot(os.stat(filePath))

如果我通过runserver命令运行django服务器,那么它运行正常。

如果我通过apache运行djnago服务器,那么它将无法正常工作。

如果文件位于同一位置,那么它将通过两种方式工作(使用apache和没有apache)Ex。 filePath ='/ home'OR'/ root'或来自同一台机器的任何位置

通过django-apache

从安装路径获取文件大小的另一种方法是什么?

请帮助。 在此先感谢。

2 个答案:

答案 0 :(得分:0)

Apache可能在缺少访问/mnt的权限的用户下运行。

例如,在Ubuntu上,apache在www-data下运行。为了确认这一点,尝试将/mnt文件夹的读/执行权限授予运行apache的用户,或者在运行apache的同一用户下执行runserver,看看是否收到相同的错误。

如果您不知道哪个用户正在运行apache,请尝试:

ps aux | grep apache

如果apache服务器可执行文件未命名为apache或apache2(例如,在某些Linux发行版中,它名为httpd),则将apache替换为上述命令中的可执行文件名。

让我们说运行apache的用户是www-data:

su - www-data -c "cat /mnt/file.html"

如果问题与权限有关,您应该会看到一条错误消息,告诉您问题是什么。

答案 1 :(得分:0)

这与进程使用的目录/文件权限和/或用户权限有关。

当您运行Django服务器时,它会以您的用户名运行,并且很可能您的用户可以访问保存文件的位置;但是当它在Apache后面运行时,它作为Apache或www-data用户运行,它们无法访问这些地方。

解决方案:您可以更改目录权限,将Apache用户添加到允许访问此目录的用户组,或者让Apache用户成为此目录的所有者,选择适合您的目标!