2013-11-26 46 views
4

我已經繼承了一個經典的ASP應用程序。有各種各樣的東西需要整理,但我被迫逐漸做事(我無法對每個腳本進行大規模的更改)。用經典ASP區分測試和生產的最佳方法

系統中有硬編碼的網址。有些腳本在升級之前必須更改,以便將測試Web根名稱更改爲活動Web根名稱。我正在尋找方法來避免這種情況(主要是以編程方式編譯服務器)。

這並不困難。一個簡單的檢查請求(「SERVER_NAME」)和這樣的事情:

appName = Request.ServerVariables("SCRIPT_NAME") 
i = InStr(2, appName, "/") 'keep initial "/" 
If i > 0 Then 
    appName = Left(appName, i) 
End If 

這在一個「無處不在」的腳本將做的伎倆。然後設置一個全局變量來保存完整的「http:// server/app /」或一個函數MakeUrlAbsolute(),然後關閉你。

但是,這有點讓我懷疑。這不會更好地存儲在應用程序級別嗎?這表明,設置它Global.asa中,是這樣的:

Sub Application_OnStart() 
    Application("WebRoot") = ... 
End Sub 

但現在,所以我減少到具有2個不同的Global.asa文件(每個環境中的一個),我不能讓SERVER_NAME的保持。

這是我唯一的選擇嗎?在Application_OnStart中的每個請求或硬編碼上解決它? 也許使用Session_OnStart會是一個妥協。還是有一些聰明的技巧來訪問Application_OnStart中的信息?也許人們使用硬編碼,因爲Global.asa不會經常更改。

+0

我會說你的開發和生產服務器單獨的global.asa文件是一個非常標準的方法。例如,我總是將連接字符串存儲爲應用程序變量,並在需要連接到數據庫時使用Application(「dbcconn」) – John

回答

1

我的ADO連接方法如下所示。

'Servername for Application Root Drive 
Select Case Left(Request.ServerVariables("PATH_TRANSLATED"), 1) 
    Case "c" strSrvr = "80.212.207.211" 'my remote server ip 
    Case Else strSrvr = "(local)"   'local Sql instance (my project on D: drive) 
End Select 

strConn = "Driver={SQL Server};Server="& strSrvr &";uid=DBUSER;pwd=MYPASS;database=MYDATABASE" 

Set objConn = Server.CreateObject("ADODB.Connection") 
objConn.Open(strConn)