使用经典ASP区分测试和生产的最佳方法

Fru*_*bat 6 global.asa asp-classic

我继承了经典的ASP应用程序。有很多事情需要整理,但我被迫逐渐做一些事情(我不能对每个脚本进行全面修改)。

系统中的某些位置带有硬编码的URL。必须先更改一些脚本,然后才能将其升级为实时Web根名称,以便将测试Web根名称更改为实时Web根名称。我正在寻找避免这种情况的方法(本质上是通过编程方式解决服务器问题)。

不难 简单检查Request(“ SERVER_NAME”)和以下内容:

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

这可以在“无处不在”脚本中完成。然后只需设置一个全局变量以容纳完整的“ http(s):// server / app /”或一个MakeUrlAbsolute()的函数,然后就可以使用了。

但是,这让我有点怀疑。这样是否可以更好地存储在应用程序级别?这建议在Global.asa中进行设置,例如:

Sub Application_OnStart()
    Application("WebRoot") = ...
End Sub
Run Code Online (Sandbox Code Playgroud)

但是现在我无法获得SERVER_NAME的权限,因此我只能使用2个不同的Global.asa文件(每个环境一个)。

这是我唯一的选择吗?在Application_OnStart中的每个请求或硬代码上都可以解决吗?也许使用Session_OnStart是一个折衷方案。还是有一些巧妙的技巧来访问Application_OnStart中的信息?也许人们会采用硬编码,因为Global.asa不会经常更改。

Sed*_*mcu 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)
Run Code Online (Sandbox Code Playgroud)