2012-01-13 46 views
1

我們在活動服務器上有一個coldfusion項目,並且在本地開發服務器上有相同的項目。這兩個項目幾乎完全相同,但在開發服務器上正在開發一些組件。兩臺服務器都有相同的ColdFusion版本(cf9)。重新編譯組件後突然修復的Coldfusion錯誤

突然我得到一個「變量未定義」在活動項目組件上的錯誤。該組件在開發項目中完全相同。但是,如果在實時項目上執行完全相同的代碼,dev項目不會拋出此錯誤。

private void function updateRecordById(required struct properties) { 
    _updateRecord(arguments.properties, aliasFrom(this.name & "_id")&" = "& 
    arguments.properties.id); 
} 

public string function aliasFrom(required string column) { 
     var matchingKey = structFindValue(variables.aliases,arguments.column,"ONE"); 
     return (arraylen(matchingKey)) ? matchingKey[1].key : arguments.column; 
    } 

錯誤爲「可變aliasFrom未定義」(NR線是代碼示例中第二行以上)。在之後,在活動服務器上重新編譯組件(通過添加writeDump(「test」);)並重新啓動應用程序,錯誤得到修復。

它看起來像活的服務器編譯updateRecordById(),但沒有編譯aliasFrom()。

  • 什麼可能導致此錯誤?
  • 我該如何防止這種情況再次發生?
  • 爲什麼heck不在開發服務器上出現這個錯誤的代碼完全相同?

更多信息:

本項目採用coldspring在applicationStart一次加載組件。實時服務器具有「請求中的緩存模板」,「組件緩存」和「保存類文件」啓用。只需重新啓動應用程序並不能解決問題。該組件已被重新編譯。

+0

這絕對聽起來像某種緩存問題。你一再提到的「編譯」cfc使我困惑,因爲CF通常不被編譯。你真的在cfc上運行'cfcompile'還是你的意思是別的? – 2012-01-13 13:36:31

+0

我的意思是「如何在創建實例時使用cf讀取組件」。如果cf使用較舊的緩存版本,那麼它仍然不應該拋出此錯誤,因爲該服務器上沒有可能引發該錯誤的組件版本。組件的以前版本從未調用「aliasFrom」,並且沒有函數「aliasFrom」。 – jan 2012-01-13 15:59:32

回答

0

ColdFusion有可能提供了不一致的cfc的緩存版本。你有沒有在服務器上保存已編譯的組件庫?

+0

'保存編譯的組件',你的意思是緩存下的'保存類文件'設置?這在啓用的服務器上啓用並在開發服務器上禁用。如果活動服務器具有該組件的緩存版本,則其任何位置都不會有'aliasFrom'。由於在錯誤中提到'aliasFrom',我不認爲服務器正在使用緩存版本。 – jan 2012-01-13 11:27:00

+0

是的,這就是我的意思,從我的經驗來看,如果它適用於一個而不是另一個,那麼就有不同的設置。 – 2012-01-14 01:20:50

+0

這個問題很難重現。這可能是「保存類文件」,這是開發者和現場之間不同行爲背後的原因。我會檢查這是正確的答案,但我仍然相信,這不僅僅是一個緩存問題。 – jan 2012-01-16 10:35:21

相關問題