我已经安装了sfErrorNotifierPlugin
。当两个选项reportErrors / reportPHPErrors reportPHPWarnings / reportWarnings都设置为false时,一切正常。但我想捕获PHP异常和警告以接收电子邮件,但随后我的所有任务都失败了,包括clear-cache。经过几个小时的测试后,我100%确定问题出在set_exception_handler / set_error_handler上。
有一个类似的问题: sfErrorNotifierPlugin on symfony task但作者在自定义任务时遇到问题。就我而言,即使是内置任务也会失败。
答案 0 :(得分:3)
我没有使用过sfErrorNotifierPlugin,但是我遇到了“默认”“上下文不存在”。之前的消息。当调用sfContext::getInstance()
并且上下文不存在时,就会发生这种情况。我已经从自定义任务中发生了很多这种情况。一种解决方案是在调用sfContext::createInstance()
之前添加sfContext::getInstance()
。这将确保存在上下文。
有一篇关于'为什么sfContext :: getInstance()不好'的博客文章更详细 - http://webmozarts.com/2009/07/01/why-sfcontextgetinstance-is-bad/
答案 1 :(得分:3)
不幸的是,这个问题无法以这种方式解决。使用sfErrorNotifierPlugin,我已启用报告PHP警告/错误(除了symfony异常),这导致了巨大的问题,例如内置任务,如clear-cache失败。
我选择的解决方案是仅在非任务模式(项目配置类)中加载插件:
public function setup()
{
$this->enableAllPluginsExcept('sfPropelPlugin');
if ('cli' == php_sapi_name()) $this->disablePlugins('sfErrorNotifierPlugin');
}
执行任务时,一切正常。当从浏览器触发应用程序时,会在发生异常/警告时发送电子邮件(可能会有人发现它很有用)。
答案 2 :(得分:0)
武器已正确解释了这个问题。但通常在控制台上执行后端/维护任务时不存在上下文。如果你自己处理这个条件会更容易。
检查,如果你真的需要上下文?
如果你这样做,你到底需要什么? 有时您只希望用户填充created_by字段。您可以通过硬编码用户ID来解决此问题。
如果你想做更多集成的事情,创建一个页面(将有一个上下文)并从那里触发任务。
答案 3 :(得分:0)
你可以在做一个类内部之前测试实例的存在。像:
if(sfContext::hasInstance())
$this->microsite_id = sfContext::getInstance()->getUser()->getAttribute('active_microsite');
答案 4 :(得分:0)
我使用插件sfErrorNotifier遇到了同样的问题。
在我的具体案例中,我注意到了一个警告:
Warning: ob_start(): function '' not found or invalid function name in /var/www/ncsoft_qa/lib/vendor/symfony/lib/config/sfApplicationConfiguration.class.php on line 155
注意:ob_start():无法在第155行的/var/www/ncsoft_qa/lib/vendor/symfony/lib/config/sfApplicationConfiguration.class.php中创建缓冲区
所以,检查文件: sfApplicationConfiguration.class.php类,第155行,
我已将''替换为null,然后警告消失,还有错误!
ob_start(sfConfig::get('sf_compressed') ? 'ob_gzhandler' : '');
错误
ob_start(sfConfig::get('sf_compressed') ? 'ob_gzhandler' : null);
好