2009-05-06 11 views
15

Esiste un modo nel codice ColdFusion per determinare su quale server il codice è in esecuzione? Ho pochi server ColdFusion con carico bilanciato. Voglio essere in grado di sapere su quale server il codice è in esecuzione quando rilevo un'eccezione, quindi posso includere tali informazioni nel codice di registrazione/reporting.In ColdFusion, c'è un modo per determinare su quale server viene eseguito il codice?

I server sono Windows 2003/IIS, se questo è importante. Mi piacerebbe sapere come farlo anche in Linux/Apache. :-)

risposta

26

Questo può aiutare ulteriormente ...

<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

Credo che il CGI.SERVER_NAME ti farà ottenere ciò che desideri.

Edit per commentare: Potreste essere in grado di fare qualcosa di un po 'più "basso livello" ...

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

(Nessun server CF qui al lavoro, quindi non posso provare quello).

+2

Io non la penso così. Conterrà il nome del server di fronte al client. Non c'è modo di scoprire la macchina attuale che stai qui. – Tomalak

+0

Non sarà sufficiente in uno scenario di bilanciamento del carico? –

+0

Il client vede un nome di server. Diciamo che ci sono 2 server. Come si scopre su quale server si sta utilizzando il nome di un server? – Tomalak

9

È possibile utilizzare Server Variables come

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 

di modificare il codice per piattaforme specifiche. Fai un <cfdump var=”#SERVER#” /> per vedere cosa è applicabile alla tua versione di Coldfusion.

È possibile ottenere il nome host con una chiamata Java:

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

Un altro posto per cercare informazioni relative al processo di esecuzione JRun è di esempio il seguente:

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

Che ti darà il nome dell'istanza JRun dove il codice è in esecuzione. Abbiamo incontrato occasioni in cui nel nostro ambiente cluster l'IIS su un nodo registrerà l'hit della pagina, ma JRun sull'altro nodo gestirà la richiesta. Occasionalmente, il JRun di un nodo smetterà di rispondere e avremo bisogno di riavviare alcuni servizi per riportare il traffico su quel nodo. Io uso il codice sopra nel mio plugin del gestore degli errori per incollare il nome del server in una e-mail che invio agli amministratori e incorporarlo nel nome del file dove scrivo le informazioni di debug.

-1

Utilizzare il codice di seguito riportato per ottenere il nome di dominio.

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

Sperando che questo è quello che ti aspetti.

+2

Se si legge il [commento] (http: // stackoverflow.it/questions/830782/in-coldfusion-is-there-a-way-to-determin-what-server-the-code-is-running-on # comment639312_830791) apportato alla [risposta esistente che l'ha suggerito] (http : //stackoverflow.com/questions/830782/in-coldfusion-is-there-a-way-to-determine-what-server-the-code-is-running-on#830791) vedresti che questo non è t una risposta valida. –

0

Per noi utilizzando i nodi dietro un proxy bilanciamento del carico Ho finito per chiamare il comando 'hostname', funziona su Windows troppo - ecco il set:

<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> 
Problemi correlati