我继承了旧的Symfony应用程序(Symfony 1.4)并且必须将其迁移到新服务器。我没有Symfony的经验,但迁移进展顺利,除了一件事,一切正常;新服务器的管理员抱怨应用程序每分钟将文件写入/ tmp目录:
管理员的部分样本输出:
-rw------- 1 www-data www-data 17133 Dec 18 14:45 config_routing.yml.php4VSPbj
-rw------- 1 www-data www-data 17133 Dec 18 14:47 config_routing.yml.php8ZZlxn
-rw------- 1 www-data www-data 17133 Dec 18 14:38 config_routing.yml.php9NH03d
-rw------- 1 www-data www-data 17133 Dec 18 14:38 config_routing.yml.phpGA9YrM
-rw------- 1 www-data www-data 17133 Dec 18 14:45 config_routing.yml.phpO9fYz5
-rw------- 1 www-data www-data 17133 Dec 18 14:47 config_routing.yml.phpOiXAYC
-rw------- 1 www-data www-data 17133 Dec 18 14:43 config_routing.yml.phpptNyFw
以及这些文件:
config_settings.yml.php,config_databases.yml.php,config_autoload.yml.php。
我确保在prod环境中禁用调试,但这仍然会发生。有没有人知道可能导致这种情况的原因?
答案 0 :(得分:2)
似乎应用程序缓存目录不存在,tempnam()
类使用的sfConfigCache
函数默认使用系统临时目录。
默认位置为./cache
,创建它并使其可由apache写入。
要了解正在发生的事情,请摘自sfConfigCache类:
第344行:$tmpFile = tempnam(dirname($cache), basename($cache));
这里创建/tmp/config_routing.yml.php*
个文件,稍后重命名或复制几行:
if (!@rename($tmpFile, $cache))
{
if (copy($tmpFile, $cache))
{
unlink($tmpFile);
}
}
显然,重命名和复制都失败了。
答案 1 :(得分:0)
Symfony创建了yml配置文件的缓存版本,因此它不必在每个请求上重新解析它们。这在开发和生产中都会发生。
防止这些错误的最简单方法是为Apache www-data用户(或运行Apache的任何人)启用写权限。 e.g:
sudo chmod 775 /tmp
或者,您可以通过添加/修改以下行来禁用settings.yml文件中的缓存:
prod:
.settings:
cache: false
如果它们覆盖了系统默认值,则可能还需要在应用程序的配置文件中完成。例如,在文件apps/frontend/config/settings.yml