2010-09-10 43 views
1

我有一個使用多層目錄結構建立的CF9項目。在根級別,我擁有帶有Application.cfc的實時生產站點。它包含許多綁定到'debugMode'標誌的變量 - 所以在生產站點的情況下,該標誌設置爲false。錯誤的Application.cfc被主站點的子目錄中的測試站點引用

在生產站點的子目錄中,我有一個包含該站點測試版本的文件夾。這有其自己的Application.cfc,其debugMode設置爲true。除了我們正在測試的這個標誌和更改外,它與生產Application.cfc相同。

直到我們添加了用於重置Application.cfc的邏輯,以便在不等待超時(我們設置爲30分鐘)的情況下查看我們的更改時,沒有任何問題。

要做到這一點,我們添加了這個塊中的Application.cfc的「OnRequestStart」功能(它存在於生產和測試版本):

<cfif StructKeyExists(URL, "reset")> 

     <!--- Reset application and session. ---> 
     <cfset THIS.OnApplicationStart() /> 
     <cfset THIS.OnSessionStart() /> 

    </cfif> 

這初步顯現做工精細。如果我們在測試版本的任何頁面的url上添加'?reset',則對Application.cfc所作的更改立即反映出來,但我們很快發現了一個令人討厭的副作用:在測試版本上調用重置ALSO更改我們的生產站點以使用測試Application.cfc的版本,從而大大放大了一切。

在生產站點上運行'?reset'邏輯解決了這個問題,但後來導致所有測試頁面都使用生產Application.cfc而不是測試版本。等待Application.cfcs超時並自動刷新沒有任何區別,所以現在我們的測試環境已經搞亂了。

任何有關正在進行或正在做什麼的信息都將非常感謝,因爲我們相當難過。這僅僅是一個糟糕的建築?我們繼承了它,現在已經習慣了這種結構,所以快速修復將是首選,但我願意接受建議。

謝謝。

回答

6

問題很可能是兩個application.cfc文件指定了相同的應用程序名稱。

因此,它們本質上是相同的應用程序。

因此,無論您是從「測試」站點還是「Live」站點觸發刷新,它都會重置相同的應用程序,然後重新實例化從您發出重置的任何版本的變量。

您需要將「測試」應用程序的應用程序名稱設置爲與實時應用程序不同的內容。

測試:

<!--- For the "Test" Application ---> 
<cfset this.name = "TESTApplication"> 

對於直播:

<!--- For the "Live" Application ---> 
<cfset this.name = "Application"> 
+0

謝謝了。這個伎倆。 – Dane 2010-09-10 19:50:53