В 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>
Надеюсь, это то, чего вы ожидаете.