我在雪松堆上运行了几个Heroku CakePHP应用程序。当缓存引擎尝试写出文件时,我的应用程序在每个请求上都出错了。
[Sat Feb 09 05:56:51 2013] [错误] [client x.x.x.x] PHP致命错误:未捕获异常'CacheException',消息'Cache engine _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):Cache :: config('_ cake_core_',Array)
#2 /app/www/lib/Cake/Core/Configure.php(76):include('/ 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] [错误] [客户端xxxx] PHP警告:/ app / www / app / tmp / cache / persistent /在第336行的/app/www/lib/Cake/Cache/Engine/FileEngine.php中无法写入
2013-02-09T05:56:51 + 00:00 app [web.1]:[Sat Feb 09 05:56:51 2013] [错误] [客户端xxxx] PHP警告:_ cake_core_ cache无法写'cake_dev_en-us'到第309行的/app/www/lib/Cake/Cache/Cache.php中的文件缓存
我认为雪松堆上的dynos有writable ephemeral filesystems。为什么我得不到可写错误,我该怎么做才能修复它们?
答案 0 :(得分:3)
您最好的选择是配置像Memcahier甚至Redis这样的实际缓存系统。虽然您通常可以写入dynos,但是您的空间有限,重启时会丢失,如果您使用多个dyno会导致问题。
此特定实例可以通过apache conf中的限制或buildpack中的dir设置来解释。我确定并非所有目录都可写。如果你运行'heroku run bash'并在你的应用程序中获得一个shell,该目录是否存在,它的权限是什么?
答案 1 :(得分:1)
这个具体问题与Heroku无关。
CakePHP的默认gitignore忽略tmp目录。 tmp目录结构从未提交到我的新应用程序中,因此在部署到Heroku时不存在。
因此,在启动一个新的CakePHP应用程序时,请注意将tmp目录实际提交到您的存储库中。