在Apache和mod_wsgi下运行的Django使用“虚拟”文件系统?

时间:2019-01-02 22:34:48

标签: python django apache mod-wsgi

好的,我知道这很奇怪,但是经过一天的搜索,我找不到这个问题的答案。

我已经使用Apache在Apache下运行了两年,并且安装了经典的mod_wsgi。网站的确切镜像用于开发和测试。

为了加快查询速度,我使用了内置的Django缓存,并使用了文件后端。在开发中(内置Django服务器),一切正常,并且在/var/tmp/django_cache下创建了一个文件。一切也都可以在生产中使用,但不会创建文件。

我很惊讶,因此我开始进行实验,并在django.core.cache模块中插入了一堆照片,然后执行了缓存内容。在某一点上,我到达了os.makedirs,它什么都不会创建。我插入了open(),创建了一个文件(绝对路径),但未创建任何内容。试图从不存在的文件中读回,并且内容在那里。

我真的很困惑。似乎某种程度上存在某种“虚拟”文件系统,该文件系统可以正常工作,但与真实事物并行运行。我正在使用Django 1.11.11。

谁在做魔术? Django,Apache,mod_wsgi?还有吗?

1 个答案:

答案 0 :(得分:0)

好吧,@ DanielRoseman是正确的:“更有可能在其他位置创建文件”。它可能影响任何文件系统操作的原因是它是<table> <tr> <th>Student Name</th> <th>Nationality</th> <th>Status</th> <th>Status1</th> <th>Status2</th> <th>Status3</th> </tr> <tr> <td class="gv-field-15-1">Student A</td> <td class="gv-field-15-90">India</td> <td class="gv-field-15-150 primary">&nbsp;</td> <td class="gv-field-15-139 status">Completed</td> <td class="gv-field-15-140 status">Pending</td> <td class="gv-field-15-141 status">Pending</td> </tr> <tr> <td class="gv-field-15-1">Student B</td> <td class="gv-field-15-90">China</td> <td class="gv-field-15-150 primary">&nbsp;</td> <td class="gv-field-15-139 status">Completed</td> <td class="gv-field-15-140 status">Pending</td> <td class="gv-field-15-141 status">Pending</td> </tr> <tr> <td class="gv-field-15-1">Student C</td> <td class="gv-field-15-90">USA</td> <td class="gv-field-15-150 primary">&nbsp;</td> <td class="gv-field-15-139 status">ERROR</td> <td class="gv-field-15-140 status">Pending</td> <td class="gv-field-15-141 status">Pending</td> </tr> <tr> <td class="gv-field-15-1">Student D</td> <td class="gv-field-15-90">France</td> <td class="gv-field-15-150 primary">&nbsp;</td> <td class="gv-field-15-139 status">Pending</td> <td class="gv-field-15-140 status">Pending</td> <td class="gv-field-15-141 status">Completed</td> </tr> </table> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>的一个称为PrivateTmp的功能。来自documentation

  

为执行的进程设置一个新的文件系统命名空间,并在其中安装私有的/ tmp和/ var / tmp目录,该目录不会被命名空间之外的进程共享

实际上,systemd/tmp中都有许多名为/var/tmp之类的文件夹。

以某种方式,我的systemd-private-273bc022d82337529673d61c0673a579-apache2.service-oKiLBu命令从未到达那些文件夹。所有创建的文件都在一个非常常规的文件系统中。现在,我也了解了为什么Apache重新启动会清除Django缓存。 find删除进程专用tmp并为新进程创建一个新的tmp。

我在这里找到了答案:https://unix.stackexchange.com/a/303327/329567