部署后我立即在 Apache 错误日志中看到类似这样的错误,并且出现 HTTP 500 错误:
PHP 致命错误:未捕获的 RuntimeException:无法写入缓存文件“/var/www/html/app/tmp/twig_cache/6d/6d9137e2293cd0c967ee8ce214a07535e605a8a487340c1fcebb231ae2ef9317.php”。
/var/www/html/app
是指向的符号链接/var/www/app/4.0.0
(如果在文档根目录之外)。我现在正在做的是在目录中准备新版本,并在目录中运行此命令以上线html
:
ln --symbolic --directory --force --no-target-directory ../app/4.1.0 app
这种方法在几个版本中都有效,但最近开始出现错误,很可能是由于更新前已经打开该网站的人造成的。
一种解决方案是通过重新启动 Apache 服务器,systemctl restart httpd
但 systemd 可能需要将近一分半钟才能重新启动它,这在工作时间内会很麻烦。Apache 在 QA 环境中重新启动非常快,因此我再次假设延迟是由于等待打开的连接终止而导致的。
有人可以建议一种更好的方法来部署应用程序以避免这个问题吗?
答案1
解决方案是重新启动 Apache 服务器
如果这解决了你描述的错误,那么就有些问题非常操作系统错误。
写入失败...
暗示
- 权限问题
- 锁定问题
- 缺少目录
您有源代码。您可以查看文件系统中的内容。您还可以查看错误的完整文本。如果其中不包含发生错误的文件和行号,那么您可以检测代码以捕获此错误。
在 Google 中输入错误消息通常是一个很好的开始。如果你这样做,你会看到其他用户至少有 2 个上述问题的描述。在某些情况下,还会有他们如何解决问题的描述
当然,使用符号链接会对性能和容量产生影响。只要您告诉 Apache 遵循符号链接,就不会对性能产生影响。