2012-08-23 28 views
4

我有我的公司的自定義庫的Zend框架應用程序。在我們的開發環境中,我在自定義庫下創建的資源在Windows中加載得很好。我只是想今天早上這個移動到Linux操作系統中,我發現了以下錯誤:bootstrap資源加載不同在Linux與Windows

Fatal error: Uncaught exception 'Zend_Application_Bootstrap_Exception' with message 'Resource matching "errorLogger" not found' in /home/nick/Repos/myfirstzend.com/includes/library/Zend/Application/Bootstrap/BootstrapAbstract.php on line 694 

我有我的插件路徑在我的引導的構造函數中設置這樣的:

$this->setOptions(array(
      'pluginPaths' => array('Company_Application_Resource' => 'Company/Application/Resource') 
)); 

然後我試圖通過以下陣列(在不同的_init方法引導內):

$resources['errorLogger'] = array(
       'stream' => array(
        'writerName' => 'db', 
        'writerParams' => array(
         'db' => array(
          'dbname' => APPLICATION_PATH . '/logs/errorLog.sqlite' 
         ) 
        ) 
       ) 
      ); 

以下方法:

$this->registerPluginResource($resourceName, $resourceOptions); 

其中$resourceName是該初始數組('errorLogger')的關鍵,$resourceOptions是該關鍵字處的數組。

我有ErrorLogger.php根據library/Company/Application/Resource/和類名稱是class Company_Application_Resource_ErrorLogger extends Zend_Application_Resource_Log

我不知所措。任何人看到我做錯了什麼?

是否有一系列var_dumps可以解決這個問題?我在這裏不知所措。編號:Bootstrap code

+0

我在Win/Linux和沒有找到文件之間遇到的最大問題是目錄名稱區分大小寫。 PHP哈希也是區分大小寫的。這可能是一個問題嗎? '$ resources ['errorLogger']'=>'$ resources ['ErrorLogger']'?我沒有想到會因爲Win上的PHP應該有相同的錯誤,但這是一個猜測。 – jmbertucci

+0

jmbertucci是對的,99%這是NAME的問題 – opHASnoNAME

+0

如果我放入'$ resources ['ErrorLogger']' – tubaguy50035

回答

0

嘗試使用Xdebug的東西,可以讓你通過沿問題區域步進交互式地調試它(例如Eclipse的PDT)。這應該讓你知道爲什麼事情會出錯。

轉儲你的所有庫代碼不多,這似乎是我能想出的唯一答案。

此外,我會嘗試重命名資源。如果我記得,Zend對這個名字的資源有問題。

+0

Stackoverflow告訴我,我還有1小時的時間來獎勵這個賞金,你的答案有更高的分數。所以我會把它給你。請注意,我的問題仍未解決。 – tubaguy50035

+0

哇。我完全忘了嘗試將它稱爲別的東西...... F我。差不多兩個月。享受你的200代表:( – tubaguy50035

-1

您確定您使用了正確的路徑嗎? 我想你應該使用APPLICATION_PATH變量來構建絕對路徑。 如果../包含在相對於APPLICATION_PATH的路徑中,請使用realpath函數

此外,我會給你一些關於自動加載器的代碼,也許它有幫助。

/** 
* Register namespace App_ 
* @return Zend_Application_Module_Autoloader 
*/ 
protected function _initAutoload() { 
    $autoloader = new Zend_Application_Module_Autoloader (array ('namespace' => 'App_', 'basePath' => APPLICATION_PATH)); 
    return $autoloader; 
} 

如果你有你在其他圖書館包括非默認的,你可以添加自定義庫的路徑包括以下所示的在你的application.ini路徑和命名空間以及。

includePaths.library = APPLICATION_PATH "/../../www_company_library" 
autoloaderNamespaces[] = 'Company'; 
+0

這個問題不能是我的路徑。我有其他的資源在這個庫中工作得很好。唯一有問題的是ErrorLogger。 – tubaguy50035

+1

您的問題是自舉順序嗎? –

+0

您在關於$ resources ['ErrorLogger']的評論中寫道,但是您的錯誤消息是關於errorLogger的。注意e和E的區別。另外,在Windows上,文件路徑應該不區分大小寫,但在Linux上不是。 –