【问题标题】:Best way to distinguish between Test and Production with Classic ASP使用经典 ASP 区分测试和生产的最佳方法
【发布时间】:2013-12-11 18:43:38
【问题描述】:

我继承了一个经典的 ASP 应用程序。有各种各样的事情需要整理,但我不得不逐渐做事情(我不能对每个脚本都进行全面更改)。

系统中有一些地方带有硬编码的网址。一些脚本必须在升级到 live 之前进行更改,以便将测试 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

这在“无处不在”的脚本中可以解决问题。然后只需设置一个全局变量来保存完整的“http(s)://server/app/”或 MakeUrlAbsolute() 的函数即可。

但是,我觉得这有点可疑。这不是更好地存储在应用程序级别吗?这建议在 Global.asa 中设置它,例如:

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

但现在我无法获取 SERVER_NAME,因此我只剩下 2 个不同的 Global.asa 文件(每个环境一个)。

这是我唯一的选择吗?解决 Application_OnStart 中的每个请求或硬代码? 也许使用 Session_OnStart 会是一种妥协。或者是否有一些巧妙的技巧可以访问 Application_OnStart 中的信息?也许人们会选择硬编码,因为 Global.asa 不经常更改。

【问题讨论】:

  • 我会说为您的开发和生产服务器单独的 global.asa 文件是一种非常标准的方式。例如,我总是将我的 connectikon 字符串存储为应用程序变量,并在需要连接到数据库时使用 Application("dbcconn")

标签: asp-classic global.asa


【解决方案1】:

我的 ADO Connection 方法如下所示。

'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)

【讨论】:

    猜你喜欢
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多