好的,我知道这很奇怪,但是经过一天的搜索,我找不到这个问题的答案。
我已经使用Apache在Apache下运行了两年,并且安装了经典的mod_wsgi。网站的确切镜像用于开发和测试。
为了加快查询速度,我使用了内置的Django缓存,并使用了文件后端。在开发中(内置Django服务器),一切正常,并且在/var/tmp/django_cache
下创建了一个文件。一切也都可以在生产中使用,但不会创建文件。
我很惊讶,因此我开始进行实验,并在django.core.cache
模块中插入了一堆照片,然后执行了缓存内容。在某一点上,我到达了os.makedirs
,它什么都不会创建。我插入了open()
,创建了一个文件(绝对路径),但未创建任何内容。试图从不存在的文件中读回,并且内容在那里。
我真的很困惑。似乎某种程度上存在某种“虚拟”文件系统,该文件系统可以正常工作,但与真实事物并行运行。我正在使用Django 1.11.11。
谁在做魔术? Django,Apache,mod_wsgi?还有吗?
答案 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"> </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"> </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"> </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"> </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。