2

我最近推送了一个 Django 应用程序。我们在服务器上的暂存子域中构建了应用程序。当我上线时,我将登台子域的文件复制到主站点,创建一个登台数据库并将旧登台站点指向新登台数据库(让新活动站点指向原始数据库)。这是在 Apache 下的 mod_python 上。

我已经为这两个站点创建了唯一的 SESSION_COOKIE_NAME 设置,并且我已将实时站点的 SESSION_COOKIE_DOMAIN 设置为“.sitename.com”,而将暂存站点设置为 None。

我们看到的问题是实时管理员中的用户正在进行编辑(看起来)正在保存到临时站点。在请求期间,用户也会“随机”退出管理站点。

我在这里显然做错了什么吗?SESSION_COOKIE_DOMAIN 是否应该是“www.sitename.com”来限制它,因为子域位于“staging.sitename.com”?我是否在现用数据库中留下了旧会话信息(在此问题出现之前,我运行了 ./manage.py clean 并从实时数据库中删除了所有会话)?

谢谢

4

1 回答 1

3

我们在过去几周遇到了这个问题。有几个地方可以重叠。

1)你运行单独的python解释器吗? 有几种方法可以配置 mod_python 以便线程不会互相踩踏。这里的关键点是提供一个独特的 ServerName(在这种情况下,域staging.sitename.comwww.sitename.com),以及在您的 Apache vhosts 配置文件中提供一个独特的 PythonInterpreter 配置设置。

PythonInterpreter mysite

同一服务器部署上的相关 Django 文档

2)您是否在同一端口上运行缓存后端? settings.py 中有一个配置,可让您在缓存内容前加上几个字符,以将暂存内容与实时内容分开。这是通过 settings.py 中的以下配置实现的:

CACHE_MIDDLEWARE_KEY_PREFIX = "STG_"

另一种选择可能是在单独的文件系统缓存上运行一段时间以查看问题是否已解决。在 settings.py 中,尝试添加

CACHE_BACKEND = 'file:///var/tmp/django_cache'

3)您是否尝试过删除所有 .pyc 文件? 奇怪的是,当上述两种解决方案未能解决我们的问题时,我们在服务器停止时运行了一个 bash 命令来删除所有已编译的 python 文件(.pyc 文件)。

find ./ -type f -name "*.pyc" -exec rm -f {} \;

这表明您的部署中的更改由于某种原因没有重新编译。

希望这可以帮助!

于 2009-06-20T02:52:03.160 回答