我正在编写一个函数来获取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
从安装路径获取文件大小的另一种方法是什么?请帮助。 在此先感谢。
答案 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用户成为此目录的所有者,选择适合您的目标!