В ColdFusion существует ли способ определить, на каком сервере работает этот код?

Есть ли способ в коде ColdFusion определить, на каком сервере выполняется код? У меня есть несколько балансированных по нагрузке серверов ColdFusion. Я хочу знать, на каком сервере работает код, когда я поймаю исключение, поэтому я могу включить эту информацию в код регистрации/отчетности.

Серверы - это Windows 2003/IIS, если это имеет значение. Мне бы хотелось узнать, как это сделать в Linux/Apache.: -)

Ответы

Ответ 1

Это может помочь вам в дальнейшем...

<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

Вы можете использовать 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#" />, чтобы узнать, что применимо к вашей версии Coldfusion.

Вы можете получить имя хоста с вызовом Java:

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

Ответ 3

Я считаю, что CGI.SERVER_NAME получит то, что вы хотите.

Изменить за комментарий: возможно, вы сможете сделать что-то более "низкоуровневое"...

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

(Здесь нет CF-сервера, поэтому я не могу это проверить).

Ответ 4

Еще одно место для поиска информации о выполняемом процессе JRun - это следующее:

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

Это даст вам имя экземпляра JRun, в котором выполняется код. Мы столкнулись с ситуациями, когда в нашей среде кластера IIS на одном node будет регистрировать постраничный доступ к странице, но JRun на другом node будет обрабатывать запрос. Время от времени у нас будет одна ответная реакция node JRun, и нам нужно будет перезапустить некоторые службы, чтобы вернуть трафик на этот node. Я использую приведенный выше код в своем плагине обработчика ошибок, чтобы вставить имя сервера в электронное письмо, которое я отправляю администраторам, и включить его в имя файла, где я пишу информацию об отладке.

Ответ 5

Для нас, использующих узлы за прокси-сервером балансировки нагрузки, я закончил тем, что вызывал команду "hostname", тоже работает на окнах - так вот набор:

<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

Используйте приведенный ниже код для получения имени домена.

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

Надеюсь, это то, чего вы ожидаете.