代码之家  ›  专栏  ›  技术社区  ›  Patrick McElhaney

在ColdFusion中,有没有一种方法可以确定代码运行在哪个服务器上?

  •  16
  • Patrick McElhaney  · 技术社区  · 15 年前

    ColdFusion代码中是否有任何方法来确定代码在哪个服务器上执行?我有几个负载平衡的ColdFusion服务器。我希望在捕获异常时能够知道代码在哪个服务器上运行,因此可以将这些信息包括在日志/报告代码中。

    服务器是Windows2003/IIS,如果这很重要的话。我也很想知道如何在Linux/Apache中实现它。-)

    7 回复  |  直到 5 年前
        1
  •  27
  •   Jayson    15 年前

    这可能有助于你进一步……

    <cfscript>
    machineName = createObject("java", "java.net.InetAddress").localhost.getCanonicalHostName();
    hostaddress = createObject("java", "java.net.InetAddress").localhost.getHostAddress();
    </cfscript>
    <cfdump var="#machineName#"><br />
    <cfdump var="#hostaddress#"><br />
    
        2
  •  9
  •   Vincent Buck    15 年前

    你可以使用 Server Variables 喜欢

    server.coldfusion.appserver 
    server.coldfusion.expiration    
    server.coldfusion.productlevel
    server.coldfusion.productname   
    server.coldfusion.productversion
    server.coldfusion.rootdir   
    server.coldfusion.serialnumber  
    server.coldfusion.supportedlocales
    server.os.additionalinformation 
    server.os.arch  
    server.os.buildnumber   
    server.os.name  
    server.os.version
    

    将代码调整到特定的平台。做一个 <cfdump var=”#SERVER#” /> 看看什么适用于你的冷聚变版本。

    您可以用Java调用获得主机名:

    <cfscript>
    machineName = createObject("java", "java.net.InetAddress").localhost.getHostName();
    instanceName = createObject("java", "jrunx.kernel.JRun").getServerName();
    </cfscript>
    
        3
  •  2
  •   JP Alioto    15 年前

    我相信 CGI.SERVER_NAME 会得到你想要的。

    编辑每个评论:你也许可以做一些更“低级”的事情…

    <cfset inet = CreateObject("java", "java.net.InetAddress")>  
    <cfdump var = "#inet.getLocalhost().gethostname()#">  
    

    (这里没有运行的CF服务器,所以我无法测试它)。

        4
  •  2
  •   Matt Newby    15 年前

    另一个查找有关执行jrun进程的信息的地方是实例如下:

    <cfset oErrorJRun = createObject("java","jrunx.kernel.JRun")/>
    <cfset strServerName = oErrorJRun.ServerName />
    

    这将为您提供执行代码的JRUN实例的名称。我们遇到过这样的情况:在集群环境中,一个节点上的IIS将记录页面命中,而另一个节点上的JRUN将处理该请求。偶尔,我们会让一个节点的jrun停止响应,我们需要重新启动一些服务来将流量返回到该节点。我在错误处理程序插件中使用上述代码,将服务器名粘贴到我发送给管理员的电子邮件中,并将其合并到我编写调试信息的文件名中。

        5
  •  0
  •   nathfy    10 年前

    对于我们使用负载平衡代理背后的节点,我最终调用了“hostname”命令,也可以在Windows上工作-所以这里是设置:

    <cfscript>
    machineName = createObject("java", "java.net.InetAddress").localhost.getCanonicalHostName();
    hostaddress = createObject("java", "java.net.InetAddress").localhost.getHostAddress();
    </cfscript>
    <cfdump var="#machineName#"><br />
    <cfdump var="#hostaddress#"><br />
    <cfdump var="#CGI.SERVER_NAME#"><br />
    <cfexecute name = "hostname" timeout = "1"></cfexecute>
    
        6
  •  -1
  •   Strawberry    10 年前

    使用下面的代码获取域名。

    <cfoutput>#cgi.server_name#</cfoutput>
    

    希望这就是你所期待的。

        7
  •  -2
  •   Fronk    5 年前
    <cffunction name="getMachineName" returntype="string" access="private" output="false" hint="Server Name">
        <cftry>
            <cfexecute
                name="hostname"
                arguments=""
                variable="local.machineNameResult"
                timeout=10 />
                <cfreturn Trim(local.machineNameResult)>
            <cfcatch type="any">
                <cfdump var="#cfcatch#">
                <cfabort>
            </cfcatch>
        </cftry>
    </cffunction>
    
    <cfdump var="#getMachineName()#" />
    <cfabort />