设置:在同一组服务器上使用Django运行多个站点,并由相同的Apache进程组提供服务。一些站点位于东部时区,一些站点位于中部时区。数据库是在单独的服务器上运行的PSQL。
当我开始时,并没有考虑各个站点如何处理时区;我想我只是看到了Django中的TIMEZONE设置,认为它会“处理好”。现在我看到了问题的破绽。
第一个问题:时区似乎在东部和中部之间来回切换。从这个网站搜索到的我的理解是,这是因为TZ的os环境变量根据Apache进程设置,具体取决于它正在处理请求的哪个Django站点,如果该进程然后处理另一个TZ的站点的请求,则时区就会出错。我认为我在这里找到的解决方案是不同时区的站点需要有不同的进程组为其提供服务。如果有误请纠正。
第二个问题:在Linux本地,我从一个中部时间的站点上运行了./manage.py runserver(我在东部)。我创建了一个资产,其发布日期在管理界面中正确显示为比实际时间早一小时。查看实际的PostgresSQL条目,发布日期的时区仍然列为-04。Postgres是否只使用服务器/计算机本身的时区,而忽略Django中的任何TZ设置?因此,在东部时间上保存在Postgres服务器上的所有条目都将显示为-04或-05,具体取决于夏令时?
如果有其他人遇到过类似的问题,欢迎提供建议。即使我将中部站点的Apache进程拆分出来,以使其TZ设置不会跨越,我仍然需要解决Postgres的问题。然后我很好奇;如果PSQL时间戳是中部时间,而TZ设置是东部时间,比如说,日期时间字段是否考虑了TZ?也就是说,如果你在Django设置为EST时执行datetime.datetime.now(),它返回2:00 PM,那么你将根据其发布日期早于那个结果来过滤内容,它是否通过只查找发布时间早于1:00PM CST或更早的内容来考虑TZ?
当我开始时,并没有考虑各个站点如何处理时区;我想我只是看到了Django中的TIMEZONE设置,认为它会“处理好”。现在我看到了问题的破绽。
第一个问题:时区似乎在东部和中部之间来回切换。从这个网站搜索到的我的理解是,这是因为TZ的os环境变量根据Apache进程设置,具体取决于它正在处理请求的哪个Django站点,如果该进程然后处理另一个TZ的站点的请求,则时区就会出错。我认为我在这里找到的解决方案是不同时区的站点需要有不同的进程组为其提供服务。如果有误请纠正。
第二个问题:在Linux本地,我从一个中部时间的站点上运行了./manage.py runserver(我在东部)。我创建了一个资产,其发布日期在管理界面中正确显示为比实际时间早一小时。查看实际的PostgresSQL条目,发布日期的时区仍然列为-04。Postgres是否只使用服务器/计算机本身的时区,而忽略Django中的任何TZ设置?因此,在东部时间上保存在Postgres服务器上的所有条目都将显示为-04或-05,具体取决于夏令时?
如果有其他人遇到过类似的问题,欢迎提供建议。即使我将中部站点的Apache进程拆分出来,以使其TZ设置不会跨越,我仍然需要解决Postgres的问题。然后我很好奇;如果PSQL时间戳是中部时间,而TZ设置是东部时间,比如说,日期时间字段是否考虑了TZ?也就是说,如果你在Django设置为EST时执行datetime.datetime.now(),它返回2:00 PM,那么你将根据其发布日期早于那个结果来过滤内容,它是否通过只查找发布时间早于1:00PM CST或更早的内容来考虑TZ?