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)