3

标题几乎概括了这个问题。我有一个基于 django 的站点在多个服务器之间进行负载平衡。尽管所有服务器都应该相同,但 $#%& 会发生......如果 django 发送的错误电子邮件包含服务器的主机名,那将非常有用。这将如何实现?

ps 如果这有什么不同的话,那就是 python 2.7.2 上的 django 1.3。

更新:

我可以得到主机名,这不是问题。问题是如何将其添加到错误电子邮件中。

4

3 回答 3

8

您可以使用SERVER_EMAILorEMAIL_SUBJECT_PREFIX设置。

在您的 settings.py 中:

 import socket
 SERVER_ADMIN = 'alerts+{0}@mydomain.com'.format(socket.gethostname())

或者

 import socket
 EMAIL_SUBJECT_PREFIX = '[my_django_app - {0}] '.format(socket.gethostname())
于 2012-04-03T21:33:55.510 回答
-1

如果您想要 httpd 服务器名称,您可以从请求中获取它。

site_name = request.META['SERVER_NAME']

这不一定是机器的主机名,但它是站点的 Apache/IIS 指令中的服务器名称别名。或者,如果您绝对需要服务器的机器名称:

import socket
host_name = socket.gethostname()

更新:

现在您有了特定服务器的主机名,您可以通过多种方式将其添加到错误电子邮件中。您可以编写自己的错误通知系统,或者正如@sdolan 提到的那样,您SERVER_ADMIN可以EMAIL SUBJECT_PREFIX更改settings.py. 或者,您可以更改SERVER_EMAIL指令。您可以使用"{0}".format(socket.gethostname())语法,也可以使用字符串列表的字符串连接"".join(string_parts_list)

# settings.py
import socket
SERVER_EMAIL = "".join(['webmaster@', socket.gethostname(), '.com'])
于 2012-04-03T20:09:18.857 回答
-2

Python 的socket.gethostname()套接字文档)是一种方法。

from socket import gethostname; print gethostname()

您还可以从os.uname()( os docs )获取一些参数

import os; print os.uname()[1]

会得到“节点名”。

于 2012-04-03T20:02:20.747 回答