似乎只有在生产服务器上预热缓存才会导致错误。这就是我尝试预热缓存的方式:
$ rm -rf app/cache/*
$ chmod -R 777 app/cache/
$ php app/console doctrine:cache:clear-metadata --env=prod
$ php -r "apcu_clear_cache();"
$ php app/console cache:warmup --env=prod --verbose
在我的本地开发环境中,这就像一个魅力。我正在使用Symfony 2.8.22和PHP 7.0。我的生产服务器上的错误是:
[SymfonyComponentDebugExceptionFatalErrorException]
Compile Error: require(): Failed opening required '/home/wingman/Symfony/app/cache/pro_/doctrine
/orm/Proxies/__CG__CmsCoreBundleEntityPagePageGroup.php'
(include_path='.:/opt/alt/php70/usr/share/pear')
Exception trace:
/home/wingman/Symfony/vendor/doctrine/common/lib/Doctrine/Common/Proxy/AbstractProxyFactory.php:209
我已经将错误所涉及的实体剥离到最低限度:
/**
* @ORMTable(name="cms_cr_page_group")
* @ORMEntity(repositoryClass="CmsCoreBundleEntityPagePageGroupRepository")
*/
class PageGroup {
/**
* @ORMId
* @ORMColumn(type="integer", options={"unsigned":true})
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
APCU缓存无法从命令行访问,您需要Web上下文才能清除它。
就个人而言,我在我的项目中使用一个名为cachetool.phar的工具来清除ACPU缓存(实际上它提供了更多(。
所以要清除您的APCU缓存:
php cachetool.phar apcu:cache:clear --fcgi=127.0.0.1:9000
(适应 PHP-FPM/PHP-CGI 移植(
如果问题仍然存在,请尝试清除查询php app/console doctrine:cache:clear-query
缓存。