Heroku PHP应用程序无法写入雪松堆栈上的文件系统

时间:2013-02-09 16:35:59

标签: php cakephp heroku

我在雪松堆上运行了几个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。为什么我得不到可写错误,我该怎么做才能修复它们?

2 个答案:

答案 0 :(得分:3)

您最好的选择是配置像Memcahier甚至Redis这样的实际缓存系统。虽然您通常可以写入dynos,但是您的空间有限,重启时会丢失,如果您使用多个dyno会导致问题。

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

答案 1 :(得分:1)

这个具体问题与Heroku无关。

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

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