【问题标题】:Can we read file from mount drives in django apache我们可以从 django apache 的挂载驱动器中读取文件吗
【发布时间】:2013-10-25 20:13:55
【问题描述】:

我正在编写一个函数来获取 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 从挂载路径获取文件大小的另一种方法是什么

请帮忙。 提前致谢。

【问题讨论】:

    标签: django apache python-2.6


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的帮助。我没有获得 apache 用户的权限/所有权,所以我没有测试。
    • 我不确定你的意思;你说不允许设置权限?
    【解决方案2】:

    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"
    

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

    【讨论】:

      猜你喜欢
      • 2015-04-24
      • 2012-11-13
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      相关资源
      最近更新 更多