2009-05-06 21 views
15

¿Hay alguna forma en el código de ColdFusion para determinar en qué servidor se está ejecutando el código? Tengo pocos servidores ColdFusion con carga equilibrada. Quiero poder saber en qué servidor se está ejecutando el código cuando detecto una excepción, por lo que puedo incluir esa información en el código de registro/informe.En ColdFusion, ¿hay alguna manera de determinar en qué servidor se está ejecutando el código?

Los servidores son Windows 2003/IIS, si eso importa. Me encantaría saber cómo hacerlo en Linux/Apache también. :-)

Respuesta

26

Esto puede ayudar a que más ...

<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

Creo que CGI.SERVER_NAME le dará lo que quiere.

Editar por comentario: Usted puede ser capaz de hacer algo un poco más "bajo nivel" ...

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

(CF No hay ningún servidor aquí en el trabajo, por lo que no se puede probar).

+2

Yo no lo creo. Contendrá el nombre del servidor frente al cliente. No hay manera de descubrir la máquina actual que está aquí. – Tomalak

+0

Eso no será suficiente en un escenario de equilibrio de carga? –

+0

El cliente ve un nombre de servidor. Digamos que hay 2 servidores. ¿Cómo averiguas en qué servidor estás utilizando el nombre de un servidor? – Tomalak

9

Se puede utilizar como 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 

para modificar su código para plataformas específicas. Haz un <cfdump var=”#SERVER#” /> para ver qué se aplica a tu versión de Coldfusion.

Usted puede obtener el nombre de host con una llamada Java:

<cfscript> 
machineName = createObject("java", "java.net.InetAddress").localhost.getHostName(); 
instanceName = createObject("java", "jrunx.kernel.JRun").getServerName(); 
</cfscript> 
2

Otro lugar para buscar información sobre el proceso de ejecución de JRun es a instancia lo siguiente:

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

Eso le dará el nombre de la instancia JRun donde el código se está ejecutando. Hemos encontrado ocasiones en las que en nuestro entorno de clúster, el IIS en un nodo registrará el hit de la página, pero el JRun en el otro nodo manejará la solicitud. Ocasionalmente, dejaremos de responder a un JRun de un nodo, y tendremos que reiniciar algunos servicios para que el tráfico regrese a ese nodo. Utilizo el código anterior en mi complemento de manejo de errores para pegar el nombre del servidor en un correo electrónico que envío a los administradores, y para incorporarlo en el nombre del archivo donde escribo la información de depuración.

-1

Utilice la siguiente pieza de código para obtener el nombre de dominio.

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

Espero que esto es lo que estás esperando.

+2

Si lees el [comentario] (http: // stackoverflow.com/questions/830782/in-coldfusion-is-there-a-way-to-determine-what-server-the-code-is-running-on # comment639312_830791) a la [respuesta existente que sugería esto] (http : //stackoverflow.com/questions/830782/in-coldfusion-is-there-a-way-to-determine-what-server-the-code-is-running-on#830791) Verás esto no es t una respuesta válida. –

0

Para nosotros usando nodos detrás de un proxy de balanceo de carga que terminé llamando al comando 'host', funciona en Windows también - así que aquí es el conjunto:

<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> 
Cuestiones relacionadas