我們在活動服務器上有一個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一次加載組件。實時服務器具有「請求中的緩存模板」,「組件緩存」和「保存類文件」啓用。只需重新啓動應用程序並不能解決問題。該組件已被重新編譯。
這絕對聽起來像某種緩存問題。你一再提到的「編譯」cfc使我困惑,因爲CF通常不被編譯。你真的在cfc上運行'cfcompile'還是你的意思是別的? – 2012-01-13 13:36:31
我的意思是「如何在創建實例時使用cf讀取組件」。如果cf使用較舊的緩存版本,那麼它仍然不應該拋出此錯誤,因爲該服務器上沒有可能引發該錯誤的組件版本。組件的以前版本從未調用「aliasFrom」,並且沒有函數「aliasFrom」。 – jan 2012-01-13 15:59:32