2011-05-25 48 views
2

我已經安裝了sfErrorNotifierPlugin。當兩個選項reportErrors/reportPHPErrors reportPHPWarnings/reportWarnings都設置爲false時,一切正常。但是我想捕捉PHP異常和警告來接收電子郵件,但是我的所有任務都失敗了,包括清除緩存。經過幾個小時的測試,我100%確定問題出在set_exception_handler/set_error_handler上。sfErrorNotifierPlugin:「默認」上下文不存在

還有一個類似的問題: sfErrorNotifierPlugin on symfony task但作者有一個自定義任務的問題。就我而言,即使內置任務失敗。

回答

2

好了,問題不能得到解決這種方式,很遺憾。使用sfErrorNotifierPlugin,我已經啓用了報告PHP警告/錯誤(除了symfony例外),這導致了巨大的問題,例如內置任務,如清除緩存失敗。

我選擇的解決方案是隻有在非工作模式(項目配置類)來加載插件:

public function setup() 
    { 
    $this->enableAllPluginsExcept('sfPropelPlugin'); 
    if ('cli' == php_sapi_name()) $this->disablePlugins('sfErrorNotifierPlugin'); 
    } 

當執行任務,一切工作正常。當瀏覽器觸發應用程序時,發生異常/警告時會發送電子郵件(也許有人會發現它很有用)。

3

我沒有用過sfErrorNotifierPlugin,但我遇到了「‘默認’上下文不存在。」消息之前。當呼叫到sfContext::getInstance()並且上下文根本不存在時發生。我在自定義任務中發生過很多事情。一種解決方案是在致電sfContext::getInstance()之前添加sfContext::createInstance()。這將確保存在上下文。

有一個有趣的博客文章「爲什麼sfContext :: getInstance()方法壞」是進入更多細節 - http://webmozarts.com/2009/07/01/why-sfcontextgetinstance-is-bad/

+0

雖然可以初始化任務和測試方面的實例,它真的會減慢速度。我認爲「重構」是一個更好的答案。 – Dziamid 2011-05-25 14:32:33

+0

比如?如果你想在一個任務中執行上下文:\t $ context = sfContext :: createInstance($ this-> configuration);在任務中沒有任何其他方式(我知道)...... – Flukey 2011-05-25 15:03:55

+0

感謝您的回答。是的,我知道sfContext :: getInstance不好,我知道。 – ducin 2011-05-27 06:22:02

0

武器已經正確地說明了問題。但是在控制檯上執行後端/維護任務時通常情況下不存在。如果你自己處理這種情況,它會更容易。

檢查,如果你真的需要的情況下?

如果你這樣做,你到底需要它? 有時您只想要用戶填充created_by字段。您可以通過對用戶標識進行硬編碼來解決問題。

如果您想要做更多集成的事情,可以創建一個頁面(這將有一個上下文)並從那裏觸發任務。

0

,你可以做一個類裏面的東西之前測試實例是否存在等。像:

if(sfContext::hasInstance()) 
    $this->microsite_id = sfContext::getInstance()->getUser()->getAttribute('active_microsite'); 
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():無法創建緩衝區在/ var/WWW/ncsoft_qa/lib中/供應商/ symfony中/ lib/config/sfApplicationConfiguration.class.php on line 155

因此,檢查文件:sfApplicationConfiguration.class。php類,行155,

我已經替換爲null,然後警告消失,也是錯誤!

ob_start(sfConfig::get('sf_compressed') ? 'ob_gzhandler' : '');

ob_start(sfConfig::get('sf_compressed') ? 'ob_gzhandler' : null);