2

我有几个 Heroku CakePHP 应用程序在 cedar 堆栈上运行。当缓存引擎尝试写出文件时,我的应用程序在每次请求时都会出错。

[2013 年 2 月 9 日星期六 05:56:51] [错误] [客户端 xxxx] PHP 致命错误:未捕获的异常 'CacheException' 带有消息'缓存引擎 _cake_core_ 未正确配置'。在 /app/www/lib/Cake/Cache/Cache.php:165
堆栈跟踪:
#0 /app/www/lib/Cake/Cache/Cache.php(135): Cache::_buildEngine('_cake_core_')
# 1 /app/www/app/Config/core.php(277): 缓存::config('_cake_core_', 数组)
#2 /app/www/lib/Cake/Core/Configure.php(76): 包括( '/app/www/app/Co...')
#3 /app/www/lib/Cake/bootstrap.php(163): 配置::bootstrap(true)
#4 /app/www/app/webroot/ index.php(82): include('/app/www/lib/Ca...')
#5 {main}
在第 165 行的 /app/www/lib/Cake/Cache/Cache.php 中抛出

2013-02-09T05:56:51+00:00 app[web.1]: [Sat Feb 09 05:56:51 2013] [error] [client xxxx] PHP Warning: /app/www/app/tmp/ cache/persistent/ 在第 336 行的 /app/www/lib/Cake/Cache/Engine/FileEngine.php 中不可写

2013-02-09T05:56:51+00:00 应用程序 [web.1]:[2013 年 2 月 9 日星期六 05:56:51] [错误] [客户端 xxxx] PHP 警告:_cake_core_ 缓存无法写入 'cake_dev_en-我们'到第 309 行的 /app/www/lib/Cake/Cache/Cache.php 中的文件缓存

我认为 cedar 堆栈上的 dynos 具有可写的临时文件系统。为什么我得到不可写的错误,我能做些什么来修复它们?

4

2 回答 2

3

最好的办法是配置一个实际的缓存系统,比如 Memcahier 甚至 Redis。虽然您通常可以写入测功机,但您的空间有限,并且在重新启动时会丢失,并且如果您使用多个测功机会导致问题。

此特定实例可以通过 apache conf 中的限制或 buildpack 中的 dir 设置来解释。我确定并非所有目录都是可写的。如果你运行 'heroku run bash' 并在你的应用程序中获取一个 shell,该目录是否存在,它的权限是什么?

于 2013-02-10T14:22:31.043 回答
1

这个具体问题与 Heroku 无关。

CakePHP 的默认gitignore 会忽略 tmp 目录。tmp 目录结构从未提交到我的新应用程序中,因此在部署到 Heroku 时不存在。

因此,当启动一个新的 CakePHP 应用程序时,请注意将 tmp 目录实际提交到您的存储库中。

于 2013-02-14T15:54:16.613 回答