我有几个Heroku CakePHP应用程序在cedar堆栈上运行。当缓存引擎试图写入文件时,我的应用程序在每次请求时都会出错。
[星期六09 05:56:51 2013][错误][客户端x. x. x. x]PHP致命错误:未捕获的异常'CacheExcture'消息'缓存引擎_cake_core_未正确配置。'在 /app/www/lib/Cake/Cache/Cache.php:165
堆栈跟踪:
#0/app/www/lib/Cake/Cache/Cache.php(135):缓存e::_buildEngine('_cake_core_')
#1 /app/www/app/Config/core.php(277):缓存e::config('_cake_core_', Array)
#2 /app/www/lib/Cake/Core/Configure.php(76):包括('/app/www/app/Co...')
#3 /app/www/lib/Cake/bootstrap.php(163):配置e::bootstrap(true)
#4 /app/www/app/webroot/index.php(82):包含('/app/www/lib/Ca...')
#5{main}
抛入第165行 /app/www/lib/Cake/Cache/Cache.php
2013-02-09T05:56:51 00:00应用程序[web.1]:[Sat Feb 09 05:56:51 2013][error][client x.x.x]PHP警告:/app/www/app/tmp/cache/persistent/不可写入/app/www/lib/Cake/cache/Engine/FileEngine。php在线336
2013-02-09T05:56:51 00:00应用程序[web.1]:[Sat Feb 09 05:56:51 2013][error][client x.x.x.x]PHP警告:_-cake_-core_-cache无法将'cake_-dev_-en-us'写入/app/www/lib/cake/cache/cache中的文件缓存。php在线309
我认为cedar堆栈上的dynos具有可写的临时文件系统。为什么我会遇到不可写的错误,我能做些什么来修复它们?
您最好的选择是配置一个实际的缓存系统,如Memcahier甚至Redis。虽然您通常可以写入dyno,但您的空间有限,并且在重新启动时会丢失,如果您使用多个dyno,会导致问题。
这个特定的实例可以通过apacheconf中的限制或buildpack中的dir设置来解释。我确定不是所有的目录都是可写的。如果您运行“heroku run bash”并在应用程序中获得一个shell,该目录是否存在,其权限是什么?
这个具体问题与Heroku无关。
CakePHP的默认gitignore忽略tmp目录。tmp目录结构从未提交到我的新应用程序中,因此在部署到Heroku时不存在。
因此,在启动一个新的CakePHP应用程序时,请注意将tmp目录实际提交到您的存储库中。