我最近推出了一个Django应用程序。我们在服务器上的暂存子域中构建了应用程序。当我上线时,我将暂存子域的文件复制到主站点,创建了一个临时数据库,并将旧的临时站点指向新的临时数据库(将新的实时站点指向原始数据库)。这是在Apache下的mod_python。
我为这两个网站创建了唯一的SESSION_COOKIE_NAME设置,我为实际网站设置了SESSION_COOKIE_DOMAIN为“.sitename.com”,为暂存网站设置了无。
我们看到的问题是,实时管理员中的用户正在进行编辑(显示)正在保存到暂存网站。用户也会在请求期间“随机”退出管理站点。
我在这里做错了吗? SESSION_COOKIE_DOMAIN应该是“www.sitename.com”来限制它,因为子域位于“staging.sitename.com”?我是否在现在的实时数据库中留下了旧的会话信息(在运行此问题之前,我运行了./manage.py清理并从实时数据库中删除了所有会话)?
由于
答案 0 :(得分:3)
我们在过去几周遇到了这个问题。有几个地方可能会重叠。
1)您是否正在运行单独的python解释器? 有几种方法可以配置mod_python,以便线程不会相互踩踏。这里的关键点是提供一个独特的ServerName(在这种情况下,域名 staging.sitename.com 和 www.sitename.com ),并提供一个独特的Apache vhosts配置文件中的PythonInterpreter配置设置。
PythonInterpreter mysite
Relevant Django docs on same-server deployments
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 {} \;
这表明部署中的更改未因某种原因而重新编译。
希望这有帮助!