调试设置为零时Heroku上的CakePHP错误

调试设置为零时Heroku上的CakePHP错误,cakephp,heroku,Cakephp,Heroku,我使用Heroku PHP构建包()在Heroku上安装了一个CakePHP应用程序 将“调试”设置为1时,应用程序将使用文件缓存并缩短缓存的寿命。此外,还会出现DebugKit工具栏 当Debug设置为0时,应用程序使用APC 当我将Debug设置为1时,它可以正常工作,但会显示DebugKit工具栏,缓存基本上是关闭的。当我设置Debug=0时,我会收到标准的“internalerror”消息。运行“heroku日志”只会显示与php无法写入tmp目录(特别是错误日志)相关的错误。我试图让c

我使用Heroku PHP构建包()在Heroku上安装了一个CakePHP应用程序

将“调试”设置为1时,应用程序将使用文件缓存并缩短缓存的寿命。此外,还会出现DebugKit工具栏

当Debug设置为0时,应用程序使用APC

当我将Debug设置为1时,它可以正常工作,但会显示DebugKit工具栏,缓存基本上是关闭的。当我设置Debug=0时,我会收到标准的“internalerror”消息。运行“heroku日志”只会显示与php无法写入tmp目录(特别是错误日志)相关的错误。我试图让cakePHP编写到stdout,但没有帮助


为了查看问题的确切原因,我从安装中删除了DebugKit,并使Debug=1的缓存与Debug=0匹配。我原以为这会导致应用程序再次出错,但它仍在工作。关闭调试时是否还有其他可能导致此问题的情况,或者我是否遗漏了错误日志错误?

如果您能够获得对tmp文件夹的写访问权限,以便查看日志,这将是理想的选择

Cake的这些内部错误通常与模型的缓存有关。因此,在APC中,您可能拥有和数据库不匹配的旧缓存

尝试清除APC缓存,看看这是否有帮助


附言:蛋糕应用程序有几个缓存,所以你必须确保什么用什么。。。您至少有
默认值
\u蛋糕\u核心
\u蛋糕\u模型
!最后两个问题可能是问题的根源。

如果您能够获得对tmp文件夹的写入权限,以便查看日志,那将是一个理想的选择

Cake的这些内部错误通常与模型的缓存有关。因此,在APC中,您可能拥有和数据库不匹配的旧缓存

尝试清除APC缓存,看看这是否有帮助


附言:蛋糕应用程序有几个缓存,所以你必须确保什么用什么。。。您至少有
默认值
\u蛋糕\u核心
\u蛋糕\u模型
!最后两个问题可能是你问题的根源。

我最终成功地解决了这个问题。答案是确保app/tmp目录和所有子目录都是由buildpack创建的。我的印象是,如果cakePHP不需要它们,它就不会担心它们,但我错了

我想让他们远离回购协议,所以在buildpack编译文件中我添加了:

CAKEPHP_APP_TMP_PATH="www/app/tmp"

# make tmp dir
echo "-----> Creating CakePHP tmp directories"
mkdir -p $CAKEPHP_APP_TMP_PATH/cache/models
mkdir -p $CAKEPHP_APP_TMP_PATH/cache/persistent
mkdir -p $CAKEPHP_APP_TMP_PATH/cache/views
mkdir -p $CAKEPHP_APP_TMP_PATH/logs
mkdir -p $CAKEPHP_APP_TMP_PATH/sessions
mkdir -p $CAKEPHP_APP_TMP_PATH/tests
chmod -R 777 $CAKEPHP_APP_TMP_PATH

这样,目录就就位了,但它们似乎从未被使用过。该应用程序现在正在正常运行,调试设置为0。

我最终设法使其正常工作。答案是确保app/tmp目录和所有子目录都是由buildpack创建的。我的印象是,如果cakePHP不需要它们,它就不会担心它们,但我错了

我想让他们远离回购协议,所以在buildpack编译文件中我添加了:

CAKEPHP_APP_TMP_PATH="www/app/tmp"

# make tmp dir
echo "-----> Creating CakePHP tmp directories"
mkdir -p $CAKEPHP_APP_TMP_PATH/cache/models
mkdir -p $CAKEPHP_APP_TMP_PATH/cache/persistent
mkdir -p $CAKEPHP_APP_TMP_PATH/cache/views
mkdir -p $CAKEPHP_APP_TMP_PATH/logs
mkdir -p $CAKEPHP_APP_TMP_PATH/sessions
mkdir -p $CAKEPHP_APP_TMP_PATH/tests
chmod -R 777 $CAKEPHP_APP_TMP_PATH

这样,目录就就位了,但它们似乎从未被使用过。应用程序现在正在正常运行,调试设置为0。

谢谢!我对Heroku不太熟悉,但我一直看到关于只读应用程序目录的引用。我认为我可以将chmod或chown添加到buildpack中,因此我将尝试修改tmp目录。我将在稍后发布结果。因此,在这一点上,我尝试向buildpack添加行以更改tmp目录的权限、所有权和使用情况。Heroku不允许我更改权限或所有权(或者至少我在buildpack中的尝试不起作用),我也不知道如何让cake写入其他位置。我尝试过根据这篇文章()向stdout和stderr发送日志,但也没有成功。此外,我还查看了其他设置,它们都设置为“$engine”,定义为“Apc”。你的应用程序如何保持其结果?如果您没有写访问权限,那么在Debug 1中,应用程序如何使用文件缓存并正常工作…?这是一个很好的问题,我无法理解。我在没有完全了解情况的情况下成功地实现了这一点(答案发布在下面)。在我完成这个项目后,我将回过头来,试图更好地了解正在发生的事情。谢谢!我对Heroku不太熟悉,但我一直看到关于只读应用程序目录的引用。我认为我可以将chmod或chown添加到buildpack中,因此我将尝试修改tmp目录。我将在稍后发布结果。因此,在这一点上,我尝试向buildpack添加行以更改tmp目录的权限、所有权和使用情况。Heroku不允许我更改权限或所有权(或者至少我在buildpack中的尝试不起作用),我也不知道如何让cake写入其他位置。我尝试过根据这篇文章()向stdout和stderr发送日志,但也没有成功。此外,我还查看了其他设置,它们都设置为“$engine”,定义为“Apc”。你的应用程序如何保持其结果?如果您没有写访问权限,那么在Debug 1中,应用程序如何使用文件缓存并正常工作…?这是一个很好的问题,我无法理解。我在没有完全了解情况的情况下成功地实现了这一点(答案发布在下面)。在我完成这个项目后,我将回过头来,试图更好地了解正在发生的事情。